2013-08-20 28 views
10

Volley trả về một lỗi khi một phản ứng 404 được trả về từ máy chủ ngay cả khi điều đó phản ứng 404 chứa mã lỗi json dựa. Nó không phân tích cú pháp phản hồi 404 chứa jason {code: resourceNotFound, msg: message_index}Volley Không Parsing phản ứng 404

Có cách nào để Volley xử lý JSon trong thông báo 404 không? Dịch vụ tôi đang tích hợp với trả về 404 khi không thể tìm thấy tài nguyên.

Trả lời

34

Nếu bạn nhận được phản hồi 404, bạn sẽ nhận được bất kỳ trình nghe lỗi nào bạn đã đặt. Bạn nhận được một đối tượng VolleyError trong trình nghe lỗi. Bạn có thể nhận được phản hồi mạng từ đối tượng này và sau đó là dữ liệu từ phần thân phản hồi. Nó được đưa ra như là một mảng char, do đó bạn cần phải chuyển đổi nó thành một cái gì đó khác cho mình.

Đoạn mã dưới đây là một yêu cầu đơn giản thực hiện điều đó, bạn sẽ cần phải đặt URL của riêng mình.

StringRequest request = new StringRequest(Request.Method.GET, "yourURL", new Response.Listener<String>() { 
     @Override 
     public void onResponse(String s) { 
      //Do whatever 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError volleyError) { 
      try { 
       String responseBody = new String(volleyError.networkResponse.data, "utf-8"); 
       JSONObject jsonObject = new JSONObject(responseBody); 
      } catch (JSONException e) { 
       //Handle a malformed json response 
      } catch (UnsupportedEncodingException error){ 

      } 
     } 
    } 
    ); 
1

Tôi đăng bài này vì tôi đặt một ngày của mình vào điều này và không muốn bất kỳ ai đấu tranh giống nhau.

ANS: Nếu ai đó muốn thêm Body/Headers cuộc gọi POST sau đó thêm đoạn code dưới đây

@Override 
       public HashMap<String, String> getHeaders() throws AuthFailureError { 
        HashMap<String, String> params = new HashMap<>(); 
        params.put("apikey", Constants.apiKey); 
        params.put("env", Constants.enviroment); 
        params.put("Content-Type", "application/json"); 
        return params; 
       } 

       @Override 
       public byte[] getBody() throws AuthFailureError { 
        return gson.toJson(user).getBytes(); 
       } 

Nơi mà người dùng là đối tượng bạn có thể vượt qua cho Cơ quan.

Mã hóa hạnh phúc :)