Подтвердить что ты не робот

Сделайте запрос залпа в другой теме

Я хотел бы сделать запрос, используя библиотеку Android Volley в другой теме.

Я имею в виду, что в потоке есть соединение, а данные обрабатываются в потоке пользовательского интерфейса.

Я хочу сделать это, потому что у меня много подключений, много данных для обработки, и сейчас пользовательский интерфейс заблокирован.

Итак, как мне создать и запустить соединение в другом потоке, а затем сделать OnResponse()/OnErrorResponse() в UIThread?

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

4b9b3361

Ответ 1

Каждый сетевой запрос, выполняемый Volley, выполняется в фоновом потоке. Волейбол позаботится об этом за кулисами. Поэтому нет необходимости выполнять запрос в другом потоке, так как это уже происходит.

С другой стороны, слушатели вызываются в потоке пользовательского интерфейса.

В основном вы отвечали на свой вопрос, когда писали, что данные обрабатываются в потоке пользовательского интерфейса. Просто переместите эту обработку данных, которая выполняется внутри ваших слушателей, в фоновый поток / AsyncTask, чтобы освободить ваш поток пользовательского интерфейса и предотвратить блокировку.