java - 如何捕获 Volley 中的意外响应错误

标签 java android android-volley

我正在使用 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/

相关文章:

android - 如何发出 Volley 请求在第一次调用后不应以任何方式重试?

android - 使用 Volley Android 向服务器发送 POST 请求

Java "pass-by-value"循环

java - arraylist 加载给了我有趣的输出

android - 定义启动 Activity ?

android - 避免在 Android 应用程序的 Android Volley 中出现 Race condition

Java 套接字编程

java - 如何仅针对/执行器/健康禁用安全性?

java - 保存 imageButton 可见性 [Android]

java - 如何获取listactivity中被点击的布局项?