Android VolleyError retrieve requested URL

不羁岁月 提交于 2019-12-11 20:09:19

问题


I am using volley library to do some API request. I have a BaseError class and a BaseRequest class, but now i need to retrieve the URL, when i get a response. To not go request by request and set the URL there, I would like to retrieve the requested URL by VolleyError object.

How can i get the URL I am looking for?

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

回答1:


The answer i found for this was to change the VolleyError object, by adding:

private String mUrl;

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

public String getUrl(){
    return mUrl;
}

Than on BaseRequest class override the method deliverError():

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

Now on BaseError you have access to the URL inside the VolleyError object:

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



回答2:


Alternatively, you could have tried this in your onErrorResponse(VolleyError error) method:

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

VolleyError has a NetworkResponse object attached that has information about the original request.



来源:https://stackoverflow.com/questions/32630993/android-volleyerror-retrieve-requested-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!