繁体   English   中英

如何从Volley捕获意外的响应错误

[英]How to catch unexpected response errors from Volley

我正在使用Volley访问某些REST API。 如果用户输入错误的密码或其他任何错误,我想捕获该异常。 例如:

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;
    }
}

并将Resonse.ErrorListener添加到我的LoginActiviy中,并使用其他参数调用LoginRequest方法。

为了捕获齐射中的所有错误,onErrorResponse不够可靠,有时我在onErrorResponse中得到null。 我更喜欢这样覆盖liverError

 @Override
    public void deliverError(VolleyError error){
        Log.e("deliverError", " here");
       int status = error.networkResponse.statusCode;

        switch (status)
        {
            case 401:

                break;
            case 307:
                break;
            ...
            default:

        }
    }

您可以创建一个实现Volley的Response.ErrorListener的自定义错误侦听器,重写onErrorResponse()方法并获取响应代码。

编辑:

实际上,您不需要创建自定义的ErrorListener,因为默认的Volley的ErrorListener就可以满足您的需求。

只需将Response.ErrorListener的实例传递到LoginRequest并在onErrorResponse()方法中执行逻辑即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM