我有一个VolleyJSONRequest被卡住了,因为来自服务器的响应不是有效的JSON(它是html)。
如何优雅地处理这个错误?我有这样的实现:
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
整个应用程序就会崩溃
我设法跟踪到www.example.com类中的以下行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));
}
}
被调用的线路是:返回响应错误(新的解析错误(je));
我该如何捕捉它,这样它就不会崩溃的应用程序?
先谢了!
2条答案
按热度按时间dnph8jn41#
如果您希望获取JSON,请检查您的URL是否有效。请求无效时通常会返回HTML。例如请求返回 404 not found 网页。
如果你想获取HTML(或XML),可以使用
StringRequest
获取String,然后将其转换为XMLDocument
,也可以使用SAXParser
解析。例如:您可能希望考虑使用我的droidQuery库作为更简单的替代方案。要使用 droidQuery 完成此请求:
3vpjnl9f2#
尝试添加此捕获