簡體   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