我正在使用 Volley 访问一些 REST API。如果用户输入错误的密码或出现其他任何问题,我想捕获异常。例如:
E/Volley:[281] BasicNetwork.performRequest:意外响应代码 401
我能以某种方式捕捉到这个异常吗?
这是登录请求:
public class LoginRequest extends StringRequest{
private static final String LOGIN_REQUEST_URL = "URL";
public static final String CLIENT_KEY= "SECRET";
public static final String CLIENT_ID = "ID";
private Map<String, String> params;
public LoginRequest(String username, String password, Response.Listener<String> listener) {
super(Method.POST, LOGIN_REQUEST_URL, listener, null);
params = new HashMap<>();
params.put("username", username);
params.put("password", password);
params.put("client_secret", CLIENT_KEY);
params.put("client_id", CLIENT_ID);
params.put("grant_type", "password");
}
@Override
public Map<String, String> getParams() {
return params;
}
}
解决方案:
我添加:
public class LoginRequest extends StringRequest{
private static final String LOGIN_REQUEST_URL = "URL";
public static final String CLIENT_KEY= "KEY";
public static final String CLIENT_ID = "ID";
private Map<String, String> params;
public LoginRequest(String username, String password, Response.Listener<String> listener, **Response.ErrorListener errorListener**) {
super(Method.POST, LOGIN_REQUEST_URL, listener, **errorListener**);
params = new HashMap<>();
params.put("username", username);
params.put("password", password);
params.put("client_secret", CLIENT_KEY);
params.put("client_id", CLIENT_ID);
params.put("grant_type", "password");
}
@Override
public Map<String, String> getParams() {
return params;
}
}
并将 Resonse.ErrorListener 添加到我的 LoginActiviy 中,并使用附加参数调用 LoginRequest 方法。
最佳答案
要捕获volley中的所有错误,onErrorResponse不够可靠,我有时会在onErrorResponse中得到null。我更喜欢像这样覆盖 deliverError :
@Override
public void deliverError(VolleyError error){
Log.e("deliverError", " here");
int status = error.networkResponse.statusCode;
switch (status)
{
case 401:
break;
case 307:
break;
...
default:
}
}
关于java - 如何捕获 Volley 中的意外响应错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275252/