2017-08-19 3 views
0

AndroidスタジオにStringrequestがあり、正常に動作しています。onResponseメソッドで応答が得られるようになりました。エラーキーがtrueの値を返したときにエラーを返すようにします。どうすればいい?カスタムエラーボレーの回答

これが私の要求です:

StringRequest stringRequest = new StringRequest(Request.Method.POST, METHOD_ACCOUNT_OTP_REQUEST, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        Log.i("response", response); 
        try { 
         JSONObject jsonObject = new JSONObject(response); 
         startVerificationActivity(jsonObject.get("sender").toString()); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
         Log.i("error", e.toString()); 
        } 
       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 


     } 
    }){ 

     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("mobilePhoneNumber", phoneNumber); 
      params.put("clientId", CLIENT_ID); 

      return params; 
    }; 

これは、サーバーの答えです:

{"sender":"10008727","error":true}

errorはJSONでtrueあるとき、私が望むすべてがonErrorResponseを実行するためにボレーを設定することです。

答えて

1

StringRequestから継承した新しいカスタムAppStringRequestクラスを作成し、上記の使用法を処理することができます。

public class AppStringRequest extends StringRequest { 

    // ... constructor ... 

    @Override 
    protected Response<String> parseNetworkResponse(NetworkResponse response) { 
     // You will receive your response here in the response parameter. 
     // parse the response and check whether the response has "error":true 
     String parsed; 
     try { 
      parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
     } catch (UnsupportedEncodingException e) { 
      parsed = new String(response.data); 
     } 

     // if it's an error, return Response.error(), otherwise, return Response.success() 

     try { 
      JSONObject resObj = new JSONObject(parsed); 
      boolean error = resObj.getBoolean("error"); 
      if (error) { 
       return Response.error(new VolleyError()); 
      } else { 
       return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); 
      } 
     } catch (JSONException e) { 
       e.printStractTrace() 
       // your server response has some issues 
     } 
     return Response.error(new VolleyError("Error message")); // can send error message in the VolleyError 
    }   

} 

次に、あなたはデフォルトStringRequestの代わりにこのAppStringRequestを使用する必要があります。

StringRequest stringRequest = new AppStringRequest(Request.Method.POST, METHOD_ACCOUNT_OTP_REQUEST, 
      ...) 

エラーメッセージがonErrorResponseに利用できるようになります:

@Override 
    public void onErrorResponse(VolleyError error) { 
     Log.i("Volley error", error.toString()); //the error message 
    }