排球请求回调传递错误的回调响应

问题描述:

我在排球请求上添加了一个回调,并且我有两个请求从两个不同的活动开始。当我执行的第一个请求,然后第二个返回第一个响应..排球请求回调传递错误的回调响应

这是我的要求和回调:

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

而另外一个假。但也许是错误的方式来使用it..I希望有一个单一的回调并重新使用它,而不是开关两个回调

之间

我的解决方案

我发现我自己的解决方案,这个问题是不是在回调,但在凌空请求。每个请求的响应都被缓存了,我不知道为什么,它总是会返回错误的错误响应。

我刚加入这个加入请求之前排队:

jsObjRequest.setShouldCache(false); 
+0

请看看我的2个答案[这里](http://*.com/questions/32375295/android-how-to-return-async-jsonobject-from-method-using-volley/32379539#32379539 )和[这里](http://*.com/questions/32627089/post-request-json-file-passing-string-and-wait-for-the-response-volley/32627293#32627293) – BNK

+0

好吧,我看到它,但是和我在发布答案之前一样,我一直都是后来REQUEST的结局! – dvdciri

这是发生,因为你的回调方法是很常见[的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都当你有一个以上。

+0

非常感谢,我正在寻找那个..你能让我举个例子吗?谢谢 – dvdciri

+0

但我已经做了很多要求,我想做一个可重复使用的回调,而不是每个请求.. – dvdciri

+0

非常感谢您的帮助! – dvdciri