ProgressDialog не может отображаться при установке метода ProgressDialog.dismiss

ProgressDialog не могу показать, когда я добавляю progressDialog.dismiss() метод в моем коде

Я тоже пытаюсь добавить Thread.sleep() так что это выполнение будет спать некоторое время, которое может показать progressdialog в течение некоторого времени, но это также не будет работать.

import android.app.ProgressDialog;
import android.content.Context;
import android.content.pm.ResolveInfo;
import android.os.Environment;
import android.widget.Toast;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;


public class Extraction {

    ProgressDialog progressDialog;

    public Extraction(List<ResolveInfo> apps, String publicSourceDir, String apkname, Context context) {
        progressDialog = new ProgressDialog(context);
        progressDialog.setMessage("Extracting");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setIndeterminate(true);
        progressDialog.show();
        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
        try {
            File file = new File(publicSourceDir);
            File file1 = new File(Environment.getExternalStorageDirectory().toString() + "/Extracted APK");

            if (!file1.exists())
                file1.mkdirs();

            file1 = new File(file1.getPath() + "/" + apkname + ".apk");
            if (!file1.exists())
                file1.createNewFile();


            bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
            bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file1));

            byte[] buf = new byte[1024];
            int len;
            while ((len = bufferedInputStream.read(buf)) > 0) {
                bufferedOutputStream.write(buf, 0, len);
            }
            Thread.sleep(1000);
            progressDialog.dismiss();

            Toast.makeText(context, "Apk Extracted", Toast.LENGTH_LONG).show();
            bufferedInputStream.close();
            bufferedOutputStream.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedInputStream.close();
                bufferedOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

1 ответ

Вам нужно поместить свою долгосрочную работу в отдельную тему или asyncTask

Потому что пользовательский интерфейс обновляется только в конце, когда ваш долгосрочный код завершен, и тогда уже вызывается show/dismiss. вот почему вы видите только конечный результат: закрытый диалог

посмотрите пример (цитата отсюда: Android: ProgressDialog не показывает):

Сделать что-то вроде:

public void doBackup(View view) throws IOException{
    final ProgressDialog pd = new ProgressDialog(this);
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    pd.setMessage("Running backup. Do not unplug drive");
    pd.setIndeterminate(true);
    pd.setCancelable(false);
    pd.show();
    Thread mThread = new Thread() {
        @Override
      public void run() {
            File source = new File("/mnt/extSdCard/DirectEnquiries"); 
            File dest = new File("/mnt/UsbDriveA/Backup");
            copyDirectory(source, dest);
            pd.dismiss();
        }
    };
    mThread.start();
}

а также здесь: ProgressDialog не отображается при выполнении задачи

Другие вопросы по тегам