[英]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.