首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android VolleyError检索请求的URL

Android VolleyError检索请求的URL
EN

Stack Overflow用户
提问于 2015-09-17 13:02:43
回答 2查看 1.3K关注 0票数 1

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

我怎样才能得到我正在寻找的网址?

BaseError:

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-17 15:49:27

我找到的解决方法是通过添加以下内容来更改VolleyError对象:

代码语言:javascript
复制
private String mUrl;

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

public String getUrl(){
    return mUrl;
}

而不是在BaseRequest类上重写deliverError()方法。

代码语言:javascript
复制
@Override
public void deliverError(VolleyError error) {
    error.setUrl(getUrl());
    listenerError.onErrorResponse(error);
}

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

代码语言:javascript
复制
@Override
public void onErrorResponse(VolleyError error) {
    error.getUrl(); //here it is
    //....
}
票数 1
EN

Stack Overflow用户

发布于 2015-09-17 16:00:46

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

代码语言:javascript
复制
String url = error.networkResponse.headers.get("Referer");

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32630993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档