Android VolleyError检索请求的URL

时间:2015-09-17 13:02:43

标签: android url error-handling android-volley

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

如何获取我要找的网址?

BaseError:

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

2 个答案:

答案 0 :(得分:0)

我找到的答案是通过添加:

来更改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对象中的网址:

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

答案 1 :(得分:0)

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

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

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