Android VolleyError 检索请求 URL

Android VolleyError retrieve requested URL

我正在使用 volley 库来做一些 API 请求。我有一个 BaseError class 和一个 BaseRequest class,但现在我需要在收到响应时检索 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);
}

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

private String mUrl;

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

public String getUrl(){
    return mUrl;
}

比 BaseRequest class 覆盖方法 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
    //....
}

或者,您可以在 onErrorResponse(VolleyError error) 方法中尝试这样做:

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

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