Android设备在发出http请求时发生超时错误

问题描述:

我的android应用程序中出现了我的请求中的超时错误。我已经设置了重试策略,但没有解决问题。在我的模拟器上测试时,它可以正常工作,没有错误,但使用真实设备进行测试时会出现超时错误。Android设备在发出http请求时发生超时错误

public void makeRequest(final String user, final String cred) 
    { 
     String url = "http://10.0.2.2:8888/map/api/login"; 

     StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() 
       { 
        @Override 
        public void onResponse(String response) 
        { 
         try 
         { 
          JSONObject jsonResponse = new JSONObject(response); 
          String status = jsonResponse.getString("status"); 
          String token = jsonResponse.getString("token"); 


          if(status.equalsIgnoreCase("error")) 
          { 
           Snackbar.make(findViewById(R.id.myCoordinatorLayout), jsonResponse.getString("message"), Snackbar.LENGTH_LONG).show(); 
          } 
          else if (status.equalsIgnoreCase("success")) 
          { 
           System.out.println(jsonResponse); 
           Intent loader = new Intent(home.this,webViewActivity.class); 
           loader.putExtra(EXTRA_MESSAGE,token); 
           startActivity(loader); 
          } 

         } 
         catch (JSONException e) 
         { 
          e.printStackTrace(); 
         } 
        } 
       }, 
       new Response.ErrorListener() 
       { 
        @Override 
        public void onErrorResponse(VolleyError error) 
        { 
         error.printStackTrace(); 
        } 
       } 
     ){ 
      @Override 
      protected Map<String, String> getParams() 
      { 
       Map<String, String> params = new HashMap<>(); 
       params.put("portal[username]", user); 
       params.put("portal[password]", cred); 
       params.put("portal[From]","web"); 
       return params; 
      } 
     }; 
     postRequest.setRetryPolicy(new DefaultRetryPolicy(
       7000, 
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
     Volley.newRequestQueue(getApplicationContext()).add(postRequest); 


    } 

我得到的错误是低于

08-18 12:42:46.341 16112-16112/com.mobile.map.map_mobile W/System.err: com.android.volley.TimeoutError 
08-18 12:42:46.341 16112-16112/com.mobile.map.map_mobile W/System.err:  at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:141) 
08-18 12:42:46.341 16112-16112/com.mobile.map.map_mobile W/System.err:  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 
+0

先在Postman Client中尝试您的API,如果它没有给出错误,请告诉我们。 – Enzokie

+0

我没有检查API网址,它似乎错误是在您的服务器端。 – Enzokie

+0

@Enzokie我检查邮递员,它似乎是API。 – lagfvu

你能在不同的设备上,并在不同的网络上查询。如果它不起作用,请检查邮差中的响应时间是否超过2500毫秒(排空默认超时),在DefaultRetryPolicy.class中增加排除的默认超时值

我假设您的Key值对是Body 。

 JSONObject params = new JSONObject(); 

      try { 
       params.put("portal[username]", user); 
       params.put("portal[password]", cred); 
       params.put("portal[From]","web"); 
      } catch (JSONException e) { 
       // Do something 
      } 

     Response.Listener<JSONObject> jsonObjectListener = new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        // Response here 
       } 
      }; 

     Response.ErrorListener errorListener = new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // Error here 
       } 
      }; 

     String url = "http://10.0.2.2:8888/map/api/login"; 

     JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, params, 
        jsonObjectListener, errorListener); 

     Volley.newRequestQueue(getApplicationContext()).add(jsonRequest);