2013-08-20 5 views
10

Voley, 404 yanıtı json tabanlı hata kodları içeriyor olsa bile 404 yanıtı sunucudan döndüğünde bir hata döndürür. Bu, jason {40: 402) yanıtını jail {code: resourceNotFound, msg: message_index}Volley Ayrıştırma 404 yanıtı

içerdiği gibi ayrıştırmaz. Entegre ettiğim hizmet, kaynak bulunamadığında 404 değerini döndürür.

cevap

34

404 yanıtı alırsanız, ayarladığınız hata dinleyicisine girmeniz gerekir. Hata dinleyicide bir VolleyError nesnesi olsun. Ağ yanıtını bu nesneden ve ardından yanıt gövdesindeki verileri alabilirsiniz. Bir char dizisi olarak verilir, böylece onu başka bir şeye dönüştürmeniz gerekir.

Aşağıdaki kod parçacığı, bunu yapmanıza rağmen kendi URL'nizi eklemeniz gerekecek basit bir istektir.

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

Bunu yayınladığımdan beri, bir günümü buna koydum ve kimsenin aynı şekilde mücadele etmesini istemiyorum.

ANS: Birisi Vücut eklemek istiyorsanız kullanıcı size Gövdeye geçebilir Nesne olduğunda/POST çağrısına Başlıkları sonra

@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(); 
       } 

aşağıdaki kodu ekleyin.

Mutlu Kodlama :)