我在截击请求中添加了一个回调,我有两个请求从2个不同的活动开始。当我执行第一个请求时,第二个请求返回第一个请求的响应..
这是我的请求和回调:
public static void RequestJsonToServer(Context ctx, final JSONObject params, final VolleyCallback callback){
MySingleVolley.getInstance(ctx).
getRequestQueue();
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,ctx.getString(R.string.defaultServerRequestUrl),params,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
callback.onSuccess(response);
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("REQUEST_JSON_TO_SERVER", "Error: " + error);
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
return headers;
}
};
MySingleVolley.getInstance(ctx).addToRequestQueue(jsObjRequest);
}
public interface VolleyCallback{
void onSuccess(JSONObject string);
}
这是两个启动请求之一:
Global.RequestJsonToServer(getActivity(), jsonObject, new Global.VolleyCallback() {
@Override
public void onSuccess(JSONObject result) {
Toast.makeText(getActivity(),result.toString(), Toast.LENGTH_LONG).show();
}
});
我希望有人可以帮助我
由于
修改 我像这样改变它
Global.RequestJsonToServer(getApplicationContext(), jsonObject, new Global.VolleyCallback() {
@Override
public void onSuccess(JSONObject result) {
Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onSuccessCustom(JSONObject string) {
}
}, true);
另一个假的..但也许使用它是错误的方式..我想有一个回调并重用它,而不是在两个回调之间切换
我的解决方案
我找到了自己的解决方案,问题不在回调中,而是在截击请求中。每个请求的响应都被缓存,我不知道为什么,它总是会返回错误的错误响应。
我刚刚在添加队列请求之前添加了这个:
jsObjRequest.setShouldCache(false);
答案 0 :(得分:1)
这种情况正在发生,因为您的回调方法很常见[onSuccess(...)]为什么不编写2个回调并根据条件使用所需的回调。 为了实现它,在你的界面中编写2个方法并传递某种标志来选择回调 将您的界面更改为此。
public interface VolleyCallback{
void onSuccess(JSONObject string);
void customOnSuccess(JSONObject string);
}
你的方法
public static void RequestJsonToServer(boolean flag,Context ctx, final JSONObject params, final VolleyCallback callback){
MySingleVolley.getInstance(ctx).
getRequestQueue();
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,ctx.getString(R.string.defaultServerRequestUrl),params,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if(flag){
callback.onSuccess(response);
}else{
callback.CustomOnSuccess(response);
}
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("REQUEST_JSON_TO_SERVER", "Error: " + error);
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
return headers;
}
};
MySingleVolley.getInstance(ctx).addToRequestQueue(jsObjRequest);
}
是的,它可重复使用onSucces,只要你有一个回调,当你有多个时都会使用它们。