2014-10-27 16 views
11

Tôi muốn thực hiện Yêu cầu bằng Thư viện Volley trong Chủ đề khác.Yêu cầu Volley trong Chủ đề khác nhau

Có nghĩa là, có kết nối nằm trong Tread và quá trình dữ liệu trong UIThread. Tôi muốn làm điều này, vì tôi có rất nhiều kết nối nên rất nhiều dữ liệu để xử lý và hôm nay tôi có giao diện người dùng là khối ..

Vì vậy, tôi có thể làm gì để bắt đầu kết nối một chủ đề khác nhau, và làm OnResponse()/OnErrorResponse() trong

JsonArrayRequest getReq = new JsonArrayRequest(url,new Response.Listener<JSONArray>() { 


          @Override 
          public void onResponse(JSONArray response) { 
           Log.d("onRESPONSE Synchro -> Produit",response.toString());         
           PgrBarProducts.setMax(response.length());  
           percentDisplayProduct.setText("0/"+ PgrBarProducts.getMax()); 
           nbMaxCallNetwork = PgrBarProducts.getMax(); 
           try { 
            for (int i = 0; i < response.length(); i++) {           
             JSONObject explrObject = response.getJSONObject(i); 
             String id = Integer.toString((Integer) explrObject.get("id")); 

             callOneObject(id, PgrBarProducts, percentDisplayProduct , 1); // appel du product 
            } 
           } catch (JSONException e) { 
            e.printStackTrace(new PrintWriter(stackTrace)); 

           } 

          } 
         }, new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError error) { 
           changeStatutToError(); 
           VolleyLog.d("", "Error: " + error.getMessage()); 
           percentDisplayProduct.setTextColor(Color.RED); 
           percentDisplayProduct.setTypeface(null, Typeface.BOLD); 
           percentDisplayProduct.setText("erreur"); 
           waitBarProgressProduct.setVisibility(View.INVISIBLE); 
           synchroProducts.setVisibility(View.VISIBLE); 
          } 
         }); 

       getReq.setRetryPolicy(new DefaultRetryPolicy(60 * 1000, 1,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));     
      // Adding request to request queue and start the request  
       AppController.getInstance().addToAndStartRequestQueue(getReq); 

     } 
    }); 
+0

không ai có thể trả lời? :/ –

Trả lời

16

Mỗi yêu cầu mạng UIThread thực hiện bởi Volley được thực hiện trong một thread nền. Volley chăm sóc điều này đằng sau hậu trường. Vì vậy, không cần phải thực hiện một yêu cầu về một chủ đề khác, vì điều đó đã xảy ra.

Trình nghe, mặt khác, được gọi trên chuỗi giao diện người dùng.

Bạn về cơ bản đã trả lời câu hỏi của riêng bạn khi bạn viết rằng dữ liệu được xử lý trên chuỗi giao diện người dùng. Chỉ cần di chuyển quá trình xử lý dữ liệu đó được thực hiện bên trong trình lắng nghe của bạn thành chuỗi nền/AsyncTask để giải phóng luồng giao diện người dùng và ngăn chặn việc chặn.

+0

tôi giải quyết vấn đề của mình bằng phương pháp khác. Tôi thấy rằng OnResponse hoạt động trên Giao diện người dùng và yêu cầu trong chủ đề khác như bạn đã nói. Nhưng bằng cách sử dụng parseNetworkResponse (phản hồi NetworkResponse) làm việc trên luồng khác, tôi có thể làm dữ liệu quá trình trong phương thức này vì vậy trong luồng khác và chỉ chạy prograsseBar trong Onresponse. Điều này, UiTHread không chặn. Sau đó, tôi không biết nếu đó là một phương pháp tốt, bạn nghĩ gì về điều này? –

+0

Tôi không chắc mình đã hiểu chính xác, nhưng có vẻ như bạn đã chuyển dữ liệu của bạn sang một chủ đề khác như tôi đã đề xuất. Nếu đó là trường hợp, sau đó tôi vui vì nó đã làm việc cho bạn. –

+0

okok, vâng vào lúc này, đó là công việc, tôi không sẽ hỏi nhiều hơn =) –

Các vấn đề liên quan