Почему моя асинхронная задача не показывает диалоговое окно выполнения?

#java #android-asynctask

#java #android-asynctask

Вопрос:

 package com.urban.map.services;

import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.util.Log;

import com.urban.map.App;
import com.urban.map.database.Queries;
import com.urban.map.database.TestDB;

import org.richit.easiestsqllib.Column;
import org.richit.easiestsqllib.Datum;
import org.richit.easiestsqllib.EasiestDB;

import java.util.Date;
import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class LoadDataService extends AsyncTask<Void, Integer, String> {
    private Context mContext;
    private ProgressDialog pd;
    public LoadDataService(Context context) {
        super();
        mContext = context;
    }

    @Override
    protected void onPreExecute() {
        pd = new ProgressDialog(mContext);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMax(100);
        pd.setMessage("Hello ");
        pd.setTitle("ASSSSSSSs");
        pd.show();
        super.onPreExecute();
    }
    int current_percent = 0;
    int count = 0;
    @Override
    protected String doInBackground(Void... voids) {
        String time = String.valueOf(new Date().getTime()/1000L);
        Queries q = App.getQueriesInstance(mContext);
        q.insertTime();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://100rad.ru/api/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        PostInterface service = retrofit.create(PostInterface.class);
        Call<List<MapData>> call = service.getMap("full");
        call.enqueue(new Callback<List<MapData>>() {
            @Override
            public void onResponse(Call<List<MapData>> call, Response<List<MapData>> response) {
                List<MapData> newData = response.body();
                String max = String.valueOf(newData.size());
                Log.e("test","max " max);
                for (int i = 0; i < newData.size(); i  ) {
                    String auth_id = "368067266";
                    if (newData.get(i).getAuth().length() > 1) {
                        auth_id = newData.get(i).getAuth();
                    }
                    String store_id = newData.get(i).getStore_id();
                    String keywords = newData.get(i).getKey();
                    String telephone = newData.get(i).getTel();
                    String latitude = newData.get(i).getLat();
                    String longitude = newData.get(i).getLon();
                    String store_desc = newData.get(i).getStore_desc();
                    String store_name = newData.get(i).getStore_name();
                    String category_id = String.valueOf(newData.get(i).getCategory());
                    if (!category_id.equals("15")) {
                        ContentValues values = new ContentValues();
                                values.put("store_id", store_id);
                                 values.put("keywords", keywords);
                                 values.put("telephone", telephone);
                                 values.put("latitude", latitude);
                                 values.put("longitude", longitude);
                                 values.put("store_desc", store_desc);
                                 values.put("store_name", store_name);
                                 values.put("category_id", category_id);
                                 values.put("auth_id", auth_id);
                        q.insertStore(values);
                        values.clear();
                        List<Value> url = newData.get(i).getPhotos();
                        for (Value test : url) {
                            String data = test.getPhoto_url();
                            ContentValues pvalues = new ContentValues();
                                    pvalues.put("store_id", store_id);
                                    pvalues.put("photo_url", data);
                            q.insertPhoto(pvalues);
                            pvalues.clear();
                        }
                    }
                    count  ;
                    current_percent = (100 * count / Integer.parseInt(max));
                    Log.e("test", "" current_percent);
                    publishProgress(current_percent);
                }
            }

            @Override
            public void onFailure(Call<List<MapData>> call, Throwable t) {

            }
        });
        return "Sucess";
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        pd.setProgress(values[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        SharedPreferences sharedPreferences = mContext.getSharedPreferences("App", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("firstLogin", false);
        editor.apply();
        if (pd != null amp;amp; pd.isShowing()) {
            pd.dismiss();
        }
    }

}
  

Это мой код mysql-> sqlite, я хочу показывать ProgressDialog при загрузке данных, но по какой-то причине он не показывает его, хотя загрузка продолжается, и количество процентов попадает в журнал.
Я работал с этим методом не так давно, и я не понимаю, что я делаю не так. Мой метод вызывается из основного действия таким образом
новый LoadDataService(this).execute();

Моя конфигурация gradle:

 compileSdkVersion 29
buildToolsVersion "29.0.2"
  

Комментарии:

1. Какого рода поведение при выполнении вы хотите? Похоже, что ваш onResponse обработчик вызывает publishProgress в цикле, переходя от 0 к 100, прежде чем система обновит пользовательский интерфейс. У вас может быть индикатор для «загрузки данных …» (с сервера) или для «анализа данных …» (заполнения Queries q ).

2. @Brian Мне нужно создать диалоговое окно, в котором будет заполнена строка от 0 до 100

3. Сколько времени требуется для перехода от Log.e("test","max " max); к Log.e("test", "" 100); по времени настенных часов?

4. @Brian , весь процесс загрузки занимает около 10-15 секунд, в зависимости от количества загруженных объектов