借助 Volley 库,我扩展了 Request 对象以实现 GSON 序列化。然后我扩展了这个新对象,以了解我想如何做我的一些 PUT
要求。这是 GSON 序列化的第一个对象:
@Override
protected Response<t> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); //response may be too large for string?
t parsedGSON = mGson.fromJson(jsonString, cls);
Response <t> returnMessage = Response.success(parsedGSON,
HttpHeaderParser.parseIgnoreCacheHeaders(response));
return returnMessage;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return Response.error(new ParseError(e));
} catch (JsonSyntaxException je) {
je.printStackTrace();
Log.e("GsonRequest", je.getMessage()!=null?je.getMessage():"JsonSyntaxError");
return Response.error(new ParseError(je));
}
}
当我的网络响应到达 Response <t> returnMessage = Response.success(parsedGSON, HttpHeaderParser.parseIgnoreCacheHeaders(response));
时我填充了<t>
具有我传入的正确类的对象完全序列化了所有变量并且没有错误。然而出于某种原因,Volley 跳转到 } catch (JsonSyntaxException je) {
我不能透露 je
的内容调试断点或打印日志。同样在我的扩展类(class)中:
new ErrorListener() {
@SuppressWarnings("unused")
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
onErrorResponse
从未被调用(我的 onResponse
部分也不是)
所以现在我不知道为什么 Volley 在序列化成功时捕获 JSONException,我也不知道为什么 Volley 不返回错误对象
洞察力赞赏
最佳答案
答案是你扩展或覆盖的任何 Volley 函数都必须有
@Override
protected void deliverResponse(T response) {
// TODO Auto-generated method stub
mListener.onResponse(response);
}
功能实现。 Listener 必须在构造函数中初始化并实现 onResponse 方法。
否则您的网络调用将永远不会在 onResponse
部分返回。
编辑: 并且您的扩展请求类还必须实现 deliverError 以及 deliverResponse
private final Listener<T> mListener;
private ErrorListener mErrorListener;
@Override
public void deliverError(VolleyError error) {
mErrorListener.onErrorResponse(error);
}
在构造函数中初始化了 ErrorListener
关于android - Volley 从不返回 VolleyError 或解释为什么会出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21556444/