15

サーバーから 404 応答が返されると、404 応答に json ベースのエラー コードが含まれていても、Volley はエラーを返します。jason { code: resourceNotFound, msg:message_index } を含む 404 応答を解析しません。

Volley に 404 メッセージで JSON を処理させる方法はありますか? 統合しているサービスは、リソースが見つからない場合に 404 を返します。

4

2 に答える 2

39

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){

            }
        }
    }
    );
于 2013-08-21T11:33:28.897 に答える
2

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

ユーザーは、ボディに渡すことができるオブジェクトです。

于 2015-07-31T12:35:59.153 に答える