android volley缓存异步请求-如何在ResponseListener中获取请求的url
我在应用程序中有大量的字符串请求。在每个模块中,都有一个不同的onResponseListener,总是做不同的事情。我需要让他们离线工作。所以我从缓存中得到了响应。问题是,可以使用不同的url异步调用许多请求。问题是如何在从缓存获取请求时记住该请求的url。目前它仅在全局变量中,但由于可以异步发送请求,所以响应可能与全局变量url不匹配。是否有某种方法可以在onResponse中获取此请求的原始请求url,并直接在Application.get().getApi().getCache(url)中使用它 请求看起来总是这样的:android volley缓存异步请求-如何在ResponseListener中获取请求的url,android,caching,asynchronous,android-volley,Android,Caching,Asynchronous,Android Volley,我在应用程序中有大量的字符串请求。在每个模块中,都有一个不同的onResponseListener,总是做不同的事情。我需要让他们离线工作。所以我从缓存中得到了响应。问题是,可以使用不同的url异步调用许多请求。问题是如何在从缓存获取请求时记住该请求的url。目前它仅在全局变量中,但由于可以异步发送请求,所以响应可能与全局变量url不匹配。是否有某种方法可以在onResponse中获取此请求的原始请求url,并直接在Application.get().getApi().getCache(url)
Application.get().getApi().getRequest(url, mListener);
姆利斯滕纳:
private class ResponseListenerX extends Api.ResponseListener {
@Override
public void onResponse(String response) {
if (response != null) {
}
}
@Override
public void onErrorResponse(VolleyError error) {
if ((error == null || error.networkResponse == null) && url != null) {
// how to get here url from the request
String response = Application.get().getApi().getCache(url);
if (response != null && response.length() > 0) {
// onResponse
}
}
}
}
您可以在侦听器中创建一个私有变量,然后在以后引用它:
Application.get().getApi().getRequest(url, new ResponseListenerX(url));
private class ResponseListenerX extends Api.ResponseListener {
private String requestedUrl;
public ResponseListenerX(String requestedUrl) {
this.requestedUrl = requestedUrl;
}
@Override
public void onResponse(String response) {
if (response != null) {
}
}
@Override
public void onErrorResponse(VolleyError error) {
if ((error == null || error.networkResponse == null) && url != null) {
// how to get here url from the request
String response = Application.get().getApi().getCache(requestedUrl);
if (response != null && response.length() > 0) {
// onResponse
}
}
}
}
因此,最好的解决方案是使用截击扩展:eu.the4thfloor.volleyextended 有一个更新的响应侦听器,您可以在其中更改额外的布尔值,这意味着响应是否和缓存中的最后一个响应不同 在错误响应上,还有一个额外的参数响应,您可以在服务器或网络中断的情况下使用它。当然,如果它只是缓存的
private class ResponseListenerYYY extends Api.ResponseListener {
@Override
public void onResponse(String response, boolean changed) {
}
@Override
public void onErrorResponse(VolleyError error, String response) {
}
}
如果在每个请求上创建新的侦听器实例,则您是唯一的:
StringRequest request = new StringRequest(Request.Method.GET, url, null,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//...
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//...
}
}
);
StringRequest-request=new-StringRequest(request.Method.GET,url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//...
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//...
}
}
);