Я просто хочу подождать на экране-заставке, пока мой JSON не будет обрабатываться, но этого не происходит. Метод onPostExecute () выполняется сразу после doinbackground (). Нет времени загружать весь JSON.
Вот мой код. Сначала я получаю нулевой размер списка, затем начнется загрузка JSON.
private class GetContacts extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
datalist = new ArrayList<>();
Log.e("entering","Enter Inside");
try{
JsonArrayRequest billionaireReq =
new JsonArrayRequest(new ApiURLs().getAll_movies_url()
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.e("response", "Response" + response);
//Initialize Gson obj to process jason response
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
// assigning data in model class, we initializing this class as a array type
// because the response is in array format
HomeModel[] getResult = gson.fromJson(response.toString(), HomeModel[].class);
// this loop help us in fetching all the records of model class
for (int i = 0; i < getResult.length; i++) {
Log.e("response", "Model Values" + getResult[i].toString());
//datalist.add(getResult[i]);
datalist.add(getResult[i]);
}
//GlobalData.setGlobal_movie_list(datalist);
Log.e("DataLoded","Record Added");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Request","Error" + error);
}
});
//This is a queue which is used by Volley to lineup requests
AppController.getInstance().addToRequestQueue(billionaireReq);
}
catch (Exception e){
Log.e("Error","Error"+e);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Log.e("Data","DataSize"+datalist.size());
}
}
@ADM вы только что написали ответ как комментарий
Да .. Только если OP понял. Что он / она здесь делает не так.
Он будет работать так большую часть времени. В postExecute вы имеете в виду результат другой асинхронной операции, которая может не быть завершена в то время. Здесь вам нужно изменить свою стратегию.




Я думаю, что запросы Volley уже асинхронны, поэтому не нужен
AsyncTask. Просто сделайте это простым методом и делайте свои вещи внутри onResponse (ответ JSONArray).