2015-12-11 27 views
-1

我嘗試一個接一個地執行請求而沒有用戶參與時遇到問題。 當運行應用程序,我可以看到這個記錄Android排球多重請求。調試工作正常,運行應用程序工作不正確

Posting params: {[email protected], tag=getConnectors} 
    verifyOperation onResponse --> 1 operation 
    verifyOperation onResponse --> {"result":"85","msg":"ok, user register, your password is your number phone!"}                        
    response 1 operation is ok call -->getConnectors 
Posting params: {[email protected], tag=geinfodates} 
verifyOperation onResponse --> 2 operation 
verifyOperation onResponse -->{"result":"85","msg":"ok, user register, your password is your number phone!"} 

但當調試應用程序,爲2運算的結果是正確的:

Posting params: {[email protected], tag=geinfodates} 
verifyOperation onResponse --> 2 
verifyOperation onResponse -->{"token":"xxxxxxxx"} 

我有一個singlenton類,在那裏我有我的StringRequest
與不同類型的聽衆

void verifyOperation(final HashMap paramOperation, final int opcion,final String url) { 
      pref = new PrefManager(context); 
      String urlFinale=url; 
      StringRequest strReq = new StringRequest(Request.Method.POST, 
        urlFinale, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
switch (opcion) { 

         case 1: 
          if (operation.result >= 0) 
          break; 
         case :2 ..... 

},新Response.ErrorListener(){

 @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Error: " + error.getMessage()); 
      Toast.makeText(context, 
        error.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      HashMap<String, String> profile = new HashMap<>(); 
      Set set = paramOperation.entrySet(); 
      Iterator iterator = set.iterator(); 
      //String number=pref.getMobileNumber(); 
      String mail = pref.getMail(); 
      switch (opcion) { 
       case 1: 
        break; 
       case 2: 
        profile = pref.getUserDetails(); 
       break; 

}

最後我stringrequest添加到我的singlenton類

// Adding request to request queue 
     MyApplication.getInstance().addToRequestQueue(strReq); 



public <T> void addToRequestQueue(Request<T> req) { 
      req.setTag(TAG); 
      req.setRetryPolicy(new DefaultRetryPolicy(
        MY_SOCKET_TIMEOUT_MS, 
        -1, //intentos 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
      getRequestQueue().add(req); 
     } 

我使用默認參數RetryPolicy起到控制凌空請求,但總是失敗。 我不明白,因爲我的第二個請求的答案可能只是第一個答案,要調用第二個操作,我需要通過第一個答覆 第二個調用永遠不會返回與第一個相同的數據,如所見在我的調試日誌中

謝謝!

回答

-1

我不理解,因爲有些人給我發了反對票......

我固定我的問題。也許可以幫助我解決某人的問題。 排球有緩存 向隊列添加請求時,可以禁用緩存 https://developer.android.com/intl/es/training/volley/simple.html 由於這個原因,當我調試時,我的應用程序工作正常,緩存應該被刪除排除時間(1-2秒到請求),並且當我運行我的應用程序時,緩存工作並且始終返回第一個響應。 您可以禁用緩存,這是一個示例 Disable Volley cache management