我的活动中有一个方法可以下载一组文件。这个下载是在我开始一项新活动时进行的。我已经使用了线程,因为它完全下载,而AsyncTask有时可能无法下载所有文件,它可能会陷入其间。
现在,下载时会显示黑屏。我想在ProgressDialog中显示它,以便用户可能会觉得某些内容正在下载。
我添加了一个ProgressDialog,但它没有显示。谁能告诉我哪里出错?
以下是我的代码:
我在onCreate()
内写道:
downloadFiles();
private boolean downloadFiles() {
showProgressDialog();
for(int i = 0; i < filesList.size();i++) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//downloading code
});
thread.start();
thread.run();
}
dismissProgressDialog();
return true;
}
//ProgressDialog progressDialog; I have declared earlier.
private void showProgressDialog() {
progressDialog = new ProgressDialog(N12ReadScreenActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("Downloading files...");
progressDialog.show();
}
private void dismissProgressDialog() {
if(progressDialog != null)
progressDialog.dismiss();
}
答案 0 :(得分:1)
试试这个..它简单
ProgressDialog progress = new ProgressDialog(this);
progress.Indeterminate = true;
progress.SetProgressStyle(ProgressDialogStyle.Spinner);
progress.SetMessage("Downloading Files...");
progress.SetCancelable(false);
RunOnUiThread(() =>
{
progress.Show();
});
Task.Run(()=>
//downloading code here...
).ContinueWith(Result=>RunOnUiThread(()=>progress.Hide()));
答案 1 :(得分:0)
请尝试以下代码。
private Handler responseHandler=null;
downloadFiles();
private boolean downloadFiles() {
showProgressDialog();
for(int i = 0; i < filesList.size();i++) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//downloading code
responseHandler.sendEmptyMessage(0);
});
thread.start();
}
responseHandler = new Handler()
{
public void handleMessage(Message msg)
{
super.handleMessage(msg);
try
{
dismissProgressDialog()
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
}
在此代码中,当您的dowload将完成时,它将调用响应处理程序并且您的进度对话框将被解除。
答案 2 :(得分:0)
在downloadFiles()中显示对话框,然后启动一些线程,在它们启动后,对话框被解除。我不认为这是你想要的,因为对话框在最后一个线程启动后立即关闭,而不是在最后一个线程完成之后。
必须在最后一个线程完成其工作后调用dismissProgressDialog()方法。因此,在线程中运行的代码结束时,您必须检查其他线程是否仍在运行,或者是否可以忽略该对话框,因为没有其他线程正在运行。
答案 3 :(得分:0)
请尝试以下代码,让我知道它是怎么回事:
private Handler mHandler = new Handler(){
public void handleMessage(Message msg)
{
dismissProgressDialog()
}
};
private boolean downloadFiles() {
showProgressDialog();
for(int i = 0; i < filesList.size();i++) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//downloading code
});
thread.start();
thread.run();
}
mHandler.sendEmptyMessage(0);
return true;
}
//ProgressDialog progressDialog; I have declared earlier.
private void showProgressDialog() {
progressDialog = new ProgressDialog(N12ReadScreenActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("Downloading files...");
progressDialog.show();
}
private void dismissProgressDialog() {
if(progressDialog != null)
progressDialog.dismiss();
}