サーバーから 404 応答が返されると、404 応答に json ベースのエラー コードが含まれていても、Volley はエラーを返します。jason { code: resourceNotFound, msg:message_index } を含む 404 応答を解析しません。
Volley に 404 メッセージで JSON を処理させる方法はありますか? 統合しているサービスは、リソースが見つからない場合に 404 を返します。
サーバーから 404 応答が返されると、404 応答に json ベースのエラー コードが含まれていても、Volley はエラーを返します。jason { code: resourceNotFound, msg:message_index } を含む 404 応答を解析しません。
Volley に 404 メッセージで JSON を処理させる方法はありますか? 統合しているサービスは、リソースが見つからない場合に 404 を返します。
404 応答を受け取った場合は、設定したエラー リスナーに応答する必要があります。エラーリスナーで VolleyError オブジェクトを取得します。このオブジェクトからネットワーク応答を取得してから、応答本文からデータを取得できます。char配列として与えられるので、自分で別のものに変換する必要があります。
以下のスニペットは、それを行う簡単なリクエストですが、独自の URL を入力する必要があります。
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){
}
}
}
);
Body/Headers を POST 呼び出しに追加したい場合は、以下のコードを追加してください。
@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();
}
ユーザーは、ボディに渡すことができるオブジェクトです。