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 не отображается при выполнении задачи