サーバーからの応答が有効な JSON (html) ではないため、スタックしている Volley JSONRequest があります。
このエラーを適切に処理するにはどうすればよいでしょうか? 私はこの実装を持っています:
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
… something …
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Log.i(TAG,"error "+error.toString());
}
});
queue.add(jsObjRequest);
ただし、リクエストを送信して無効な JSON レスポンスを取得すると、onErrorResponse が呼び出されません。代わりに、例外が発生します
08-14 16:26:15.590: D/538 - JsonRequest(27888): exception error Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
アプリ全体がクラッシュします。
そのエラーを JsonObjectRequest.java クラスの次の行まで追跡することができました。
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
Log.d(TAG,"response headers "+response.headers.toString());
String jsonString =
new String(response.data, HttpHeaderParser.parseCharset(response.headers));
Log.d(TAG,"json string "+jsonString);
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
Log.d(TAG,"parse error");
return Response.error(new ParseError(e));
} catch (JSONException je) {
Log.d(TAG,"exception error "+je.getLocalizedMessage());
return Response.error(new ParseError(je));
}
}
呼び出される行は次のとおりです。return Response.error(new ParseError(je));
アプリがクラッシュしないようにするにはどうすればよいですか?
前もって感謝します!