如果服务器返回错误401,我必须打开登录活动, 而不是像这样在任何调用上捕获错误类型,是否可以将错误管理集中在唯一的位置?
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
Toast.makeText(context,
context.getString(R.string.error_network_timeout),
Toast.LENGTH_LONG).show();
} else if (error instanceof AuthFailureError) {
//TODO
} else if (error instanceof ServerError) {
//TODO
} else if (error instanceof NetworkError) {
//TODO
} else if (error instanceof ParseError) {
//TODO
}
}
我尝试实施自定义重试策略
@Override
public void retry(VolleyError error) throws VolleyError {
//HTTP 401 and 403
if (error instanceof AuthFailureError) {
AuthFailureError er = (AuthFailureError) error;
//HTTP 401
if (er.networkResponse.statusCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
Intent intent = new Intent(context, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
}
else {
request.deliverError(er);
}
}
}
但401错误仍会传递给onErrorResponse事件。
答案 0 :(得分:1)
请尝试扩展com.android.volley.Request
来创建自定义类,以实现此目的:这称为Volley自定义请求。然后覆盖所需的方法,并覆盖parseNetworkResponse()
以执行类似的操作
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
if (response.statusCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
/* go to login */
}
}
这应该做到。