2016-10-10 5 views
1

PUT-Anfrage mit VolleyErste com.android.volley.ServerError

 
Log.i("JsonObject is",finaljsonData.toString()); 
Output:- 

{"stats":[{"med_id":1,"med_name":"Evening","start_date":1476107306168,"end_date":1476193706168,"adherence":{"taken_on":[1476107704867],"missed_on":[]}}]} 

Code:

JsonObjectHeader customRequest=new JsonObjectHeader(Request.Method.PUT,url, finaljsonData, listener, errorListener); 
    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 
    requestQueue.add(customRequest); 

Und die JsonObjectHeader Klasse: -

public class JsonObjectHeader extends JsonRequest<JSONObject> { 

    public JsonObjectHeader(int method, String url, String requestBody, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { 
     super(method, url, requestBody, listener, errorListener); 
    } 

    public JsonObjectHeader(String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, 
          Response.ErrorListener errorListener) { 
     this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest, 
       listener, errorListener); 
    } 

    public JsonObjectHeader(int method, String url, JSONObject jsonRequest, 
          Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { 
     super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, 
       errorListener); 
    } 

    @Override 
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 

     try { 
      Log.i("Response parse","Yes"); 
      String jsonString = new String(response.data, 
        HttpHeaderParser.parseCharset(response.headers)); 
      Log.i("Json String",jsonString); 
      Log.i("Response Complete",response.toString()); 
      Log.i("Response Data",response.data.toString()); 
      return Response.success(new JSONObject(jsonString), 
        HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JSONException je) { 
      return Response.error(new ParseError(je)); 
     } 

    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     HashMap<String, String> headers = new HashMap<String, String>(); 
     headers.put("Content-Type", "application/json; charset=utf-8"); 
     headers.put("x-access-token", Constants.getTokenDB()); 
     return headers; 

    } 

} 

LogCat OutPut:

 
10-10 19:45:15.186 22355-22426/user.com.test2 E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f5ba7cac7e0 
10-10 19:45:15.797 22355-22650/user.com.test2 E/Volley: [198] BasicNetwork.performRequest: Unexpected response code 500 for url 
10-10 19:45:15.798 22355-22355/user.com.test2 W/System.err: com.android.volley.ServerError 
10-10 19:45:15.798 22355-22355/user.com.test2 W/System.err:  at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:163) 
10-10 19:45:15.798 22355-22355/user.com.test2 W/System.err:  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 

Server LogCat: -

{} 
www-user-9 PUT /medstats 500 4.579 ms - 627 

TypeError: Cannot read property 'length' of undefined 
www-user-9  at /abc.js:390:12 
www-user-9  at Layer.handle [as handle_request] (/xyz.js.js:95:5) 
www-user-9  at next (/abc.js:131:13) 
www-user-9  at /abc.js:61:5 
www-user-9  at //abc.js:27:18 
www-user-9  at nextTickCallbackWith0Args (node.js:420:9) 
www-user-9  at process._tickDomainCallback (node.js:390:13) 

Ich habe mit PostMan versucht. So funktioniert es gut: so denke ich, kein Serverfehler

+0

Sie haben einen Serverfehler (dh außerhalb Ihrer App). Sie müssen die Serverprotokolle auf die Ursache des Fehlers prüfen und von dort aus fortfahren. Wenn Sie versuchen, den Fehler auf Android zu behandeln, müssen Sie den Status überprüfen, der vom Server zurückgegeben wird. – ChrisStillwell

+0

@ChrisStillwell Ich habe Server-Log hinzugefügt –

+0

Ich bekomme leere Körper auf dem Server, so könnte dies mir Fehler von App –

Antwort

0

Der JSON-Körper, den Sie als Zeichenfolge senden, versuchen, es als ein JSON-Objekt zu senden. Der Server erwartet möglicherweise ein JSON-Objekt. Sonst kann es Probleme mit den Headerwerten geben. Prüfen Sie im Postboten, ob die von Ihnen gesendete Kopfzeile mit der von der App gesendeten übereinstimmt.

+0

Ich sende auch das JsonObject. das war der Tippfehler. Ich habe mit dem Postboten gecheckt, mit dem gleichen Zeichen. –