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 对象,其中包含有关原始请求的信息。
我正在使用 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 对象,其中包含有关原始请求的信息。