【问题标题】:Android VolleyError retrieve requested URLAndroid VolleyError 检索请求的 URL
【发布时间】:2015-12-14 08:41:12
【问题描述】:

我正在使用 volley 库来执行一些 API 请求。我有一个 BaseError 类和一个 BaseRequest 类,但现在我需要在收到响应时检索 URL。为了不逐个请求并在那里设置 URL,我想通过 VolleyError 对象检索请求的 URL。

如何获取我要查找的 URL?

基本错误:

public abstract class BaseError implements Response.ErrorListener {

private Context mContext;

protected BaseError(Context context) {
    this.mContext = context;
}

@Override
public void onErrorResponse(VolleyError error) {

    String errorDesc;

    if (error.networkResponse == null) {
        if (!Connectivity.isConnected(mContext)) {
            errorDesc = mContext.getResources().getString(R.string.error_internet_connection);
        } else {
            errorDesc = mContext.getResources().getString(R.string.error_unexpected);
        }
    } else {
        try {
            if (error.networkResponse.statusCode == HttpURLConnection.HTTP_FORBIDDEN) {
                errorDesc = mContext.getResources().getString(R.string.error_authorization);
            } else {
                String dataStr = new String(error.networkResponse.data);
                JSONObject object = new JSONObject(dataStr);
                Timber.e(object.optString("message"));
                errorDesc = mContext.getResources().getString(R.string.error_unexpected);
            }
        } catch (JSONException e) {
            errorDesc = mContext.getResources().getString(R.string.error_unexpected);
        }
    }

    onError(new ErrorResponse(errorDesc, error), "url missing here...");
}

public abstract void onError(ErrorResponse response, String url);
}

【问题讨论】:

    标签: android url error-handling android-volley


    【解决方案1】:

    我找到的答案是更改VolleyError 对象,添加:

    private String mUrl;
    
    public void setUrl(String url){
        this.mUrl = url;
    }
    
    public String getUrl(){
        return mUrl;
    }
    

    比BaseRequest类重写方法deliverError():

    @Override
    public void deliverError(VolleyError error) {
        error.setUrl(getUrl());
        listenerError.onErrorResponse(error);
    }
    

    现在在BaseError 上,您可以访问VolleyError 对象内的URL:

    @Override
    public void onErrorResponse(VolleyError error) {
        error.getUrl(); //here it is
        //....
    }
    

    【讨论】:

      【解决方案2】:

      或者,您可以在 onErrorResponse(VolleyError error) 方法中尝试此操作:

      String url = error.networkResponse.headers.get("Referer");
      

      VolleyError 附加了一个 NetworkResponse 对象,其中包含有关原始请求的信息。

      【讨论】:

      • 它返回空值。我没有“Referer”键。
      猜你喜欢
      • 2021-05-02
      • 2017-11-16
      • 2023-03-12
      • 1970-01-01
      • 2018-11-28
      • 2011-11-27
      • 2013-05-03
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多