2015-06-27 97 views
2

在我的android應用程序中,我必須使用android volley做一些http請求。如果我的請求成功,則出現問題,當出現錯誤並且此錯誤有狀態碼401。在這種情況下,我想做一些東西,並重復相同的請求,相同的網址和相同的參數。有沒有官方的方式來做到這一點?如果不是,我怎樣才能從錯誤中得到我的參數?如何在未授權的情況下使用android volley重新發送請求

StringRequest req = new StringRequest(method, URL, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response){ 
        //VolleyLog.v("Response:%n %s", response); 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      NetworkResponse response = error.networkResponse; 
      if(response.statusCode == 401){ 
       //make some stuff... 
       //here i want to resend my request 
      } 
     } 
    }) { 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      //get headers 
     } 

     @Override 
     public Map<String, String> getParams() throws AuthFailureError { 
      //get params 
     } 


    }; 

    // add the request object to the queue to be executed 
    ApplicationController.getInstance().addToRequestQueue(req); 

任何幫助,將不勝感激。

回答

-1

修改請求後,在requestQueue中添加請求。 在ErrorListener中執行。

1

您可以創建RetryPolicy改變默認的重試操作,只有指定超時毫秒,重試次數參數:

public class YourRequest extends StringRequest { 
    public YourRequest(String url, Response.Listener<String> listener, 
         Response.ErrorListener errorListener) { 
     super(url, listener, errorListener); 
     setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
    } 
} 

的另一種方式是估計VolleyError,又當如果是TimeoutError重新執行相同的請求例如:

public static void executeRequest() { 
    RequestQueue.add(new YourRequest("http://your.url.com/", new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      if (error instanceof TimeoutError) { 
       // note : may cause recursive invoke if always timeout. 
       executeRequest(); 
      } 
     } 
    })); 
} 

希望這將幫助你

+0

現在的問題是關於401,不超時。 – kaay

相關問題