2016-10-10 40 views
1

PUT請求使用凌空獲取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":[]}}]} 

代碼:

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

而且JsonObjectHeader類是: -

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的輸出:

 
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) 

服務器的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) 

我一直在使用郵遞員嘗試。所以它工作正常:所以我認爲沒有服務器錯誤

+0

你有一個服務器錯誤(即在你的應用程序之外)。您將需要檢查服務器日誌找到錯誤的根本原因,然後從那裏開始。如果您想要處理Android上的錯誤,您需要檢查服務器返回的狀態。 – ChrisStillwell

+0

@ChrisStillwell我已添加服務器日誌 –

+0

我得到服務器上的空身體,所以這可能是我的錯誤從應用程序 –

回答

0

你發送的json正文字符串,嘗試發送它作爲json對象。服務器可能會期待一個json對象。否則可能會出現標題值問題。檢查郵遞員是否您從那裏發送的標題與您從應用程序發送的標題相同。

+0

我也發送jsonObject。這是錯字錯誤。我與郵遞員檢查,工作正常,同樣的道理。 –