2016-07-27 7 views
0

Ich verwende derzeit eine JSONObjectRequest, um Daten von einem Server zu erhalten. Ich sende JSON-Daten, aber ich erwarte eine String-Antwort. Volley gibt einen Fehler zurück (ein Nullfehler natürlich, also habe ich keine Ahnung, was los ist). Liegt das daran, dass ich die falsche Anfrage verwende? Mein Code ist:Android Volley Beitrag Anfrage, senden JSONObject, String Antwort

JsonObjectRequest jsonObjReq = new JsonObjectRequest(
      Request.Method.POST, 
      postURL.toString(), 
      getJson(), 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { Log.d(TAG, response.toString()); } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); Log.v(TAG, "Error: " + error.getCause()); } 
      } 
    ); 

Meine logcat enthält die folgenden Daten:

07-27 11:45:57.218 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo+,hn 21(0x6670742e6d6963),sn(),family 0,flags 4 
07-27 11:45:57.228 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo-,err=8 
07-27 11:45:57.228 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo+,hn 21(0x6670742e6d6963),sn(),family 0,flags 1024 
07-27 11:45:57.228 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo-, 1 
07-27 11:45:57.228 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo_proxy+ 
07-27 11:45:57.228 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo_proxy-, success 
07-27 11:46:02.258 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo+,hn 21(0x6670742e6d6963),sn(),family 0,flags 4 
07-27 11:46:02.258 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo-,err=8 
07-27 11:46:02.258 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo+,hn 21(0x6670742e6d6963),sn(),family 0,flags 1024 
07-27 11:46:02.258 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo-, 1 
07-27 11:46:02.258 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo_proxy+ 
07-27 11:46:02.288 11309-12374/com.microsoft.quiztest D/libc: [NET] getaddrinfo_proxy-, success 
07-27 11:46:12.368 11309-11309/com.microsoft.quiztest V/DeviceForensics: Error: null 
07-27 11:46:12.368 11309-11309/com.microsoft.quiztest W/System.err: com.android.volley.TimeoutError 
07-27 11:46:12.368 11309-11309/com.microsoft.quiztest W/System.err:  at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:141) 
07-27 11:46:12.368 11309-11309/com.microsoft.quiztest W/System.err:  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 
+0

Post logcat, sowie alle Fehlerprotokoll in Server. – Bonatti

+0

Können Sie [diese Antwort überprüfen] (http://stackoverflow.com/a/33600251/4903925) und verschiedene Timeouts versuchen. Wo ist dein Gastgeber? Lokal? Internet? Intern? Können Sie mit einer anderen Ressource/Maschine darauf zugreifen? Können Sie sicherstellen, dass die vereinbarten Mime-Typen korrekt sind? – Bonatti

+0

Sie erhalten keine Antwort .Simply Ihr Server oder Ihre Anfrage dauert zu viel Zeit für die Ausführung, so gibt volley Sie Timeout-Fehler .Es passiert möglicherweise Sie senden eine riesige Daten wie Bild oder etwas oder aufgrund von Netzwerkkonnektivität Problem oder Ihre Server-Code sendet keine Antwort –

Antwort

0

Zunächst einmal müssen Sie sicher sein, dass Ihr Server Sie hält einen JsonObjectRequest und kein JsonArrayRequest.

Wenn dies nicht der Fall ist, vergewissern Sie sich, dass Sie keine Kopfzeile benötigen, oder wenn Sie die Timeout-Dauer mit Request.setRetryPolicy() ändern.

hoffe, das hilft,

mRequestQueue = Volley.newRequestQueue(context); 
    final String url = "url"; 
    final ProgressDialog pDialog = new ProgressDialog(getActivity()); 
    pDialog.setMessage("Loading data..."); 
    pDialog.show(); 
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, 
      url, params, 
      new Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 
        Log.d("TAGOnResponse", response.toString()); 
        pDialog.hide(); 
       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      String json = null; 

      NetworkResponse response = error.networkResponse; 
      if(response != null && response.data != null){ 
       switch(response.statusCode){ 
        case 400: 
         json = new String(response.data); 
         json = trimMessage(json, "message"); 
         if(json != null) displayMessage(json); 
         Log.i("ResponseJSON", json); 
         break; 
        case 401: 
         json = new String(response.data); 
         json = trimMessage(json.toString(), "message"); 
         if(json != null) displayMessage(json); 
         break; 
        case 500: 
         json = new String(response.data); 
         json = trimMessage(json, "message"); 
         if(json != null) displayMessage(json); 
         break; 
       } 
      } 
      VolleyLog.d("TAGOnError " + error.getMessage(), "Error: " + error.getMessage()); 
      pDialog.hide(); 
     } 
    }) { 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("X-Usuario-Email", email); 
      headers.put("X-Usuario-Token", token); 
      return headers; 
     } 
    }; 
    jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, 
      DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
    mRequestQueue.add(jsonObjReq); 
    mRequestQueue.addRequestFinishedListener(this); 
} 

@Override 
public void onRequestFinished(Request<Object> request) { 
    if (request.getUrl().contains("Something")) { 
     // Success asynchronous call 
    } 
}