我正在使用Volley访问一些REST API。如果用户输入了错误的密码或其他任何错误,我想捕获异常。 E.g:
E/Volley: [281] BasicNetwork.performRequest: Unexpected response code 401
我可以以某种方式捕捉到这种说法吗?
这是LoginRequest:
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;
}
}
并在我的LoginActiviy中添加了一个Resonse.ErrorListener,并使用附加参数调用了LoginRequest方法。
答案 0 :(得分:2)
为了捕获齐射中的所有错误,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:
}
}
答案 1 :(得分:1)
您可以创建一个自定义错误侦听器,它实现Volley的 Response.ErrorListener ,覆盖onErrorResponse()方法并获取响应代码。
实际上您不需要创建自定义ErrorListener,因为默认的Volley的ErrorListener足以满足您的需求。
只需将Response.ErrorListener的一个实例传递给LoginRequest,并在onErrorResponse()方法中执行逻辑。