2015-10-05 66 views
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); 

而另外一個假。但也許是錯誤的方式來使用it..I希望有一個單一的回調並重新使用它,而不是開關兩個回調

之間

我的解決方案

我發現我自己的解決方案,這個問題是不是在回調,但在凌空請求。每個請求的響應都被緩存了,我不知道爲什麼,它總是會返回錯誤的錯誤響應。

我剛加入這個加入請求之前排隊:

jsObjRequest.setShouldCache(false); 
+0

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

+0

好吧,我看到它,但是和我在發佈答案之前一樣,我一直都是後來REQUEST的結局! – dvdciri

回答

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都當你有一個以上。

+0

非常感謝,我正在尋找那個..你能讓我舉個例子嗎?謝謝 – dvdciri

+0

但我已經做了很多要求,我想做一個可重複使用的回調,而不是每個請求.. – dvdciri

+0

非常感謝您的幫助! – dvdciri