I would like to make a request using the Android Volley library in a different thread.
What I mean is, there is the connection which is in the thread and the data is processed in the UI thread.
I want to do this because I have a lot of connections, a lot of data to process, and right now the user interface is blocked.
So, how do I create and start the connection in a different Thread, and do then OnResponse()/OnErrorResponse() in the 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);
Every network request performed by Volley is performed in a background thread. Volley takes care of this behind the scenes. So there is no need to perform a request on a different thread, since that's already happening.
The listeners, on the other hand, are called on the UI thread.
You basically answered your own question when you wrote that the data is processed on the UI thread. Simply move that data processing that is performed inside your listeners to a background thread / AsyncTask
to free your UI thread and prevent the blocking.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With