Java 使用一个AsyncTask类无法显示进度对话框
我试图在MainActivity中显示一个进度对话框,但这是不可能的: 该课程在我的主要活动中:Java 使用一个AsyncTask类无法显示进度对话框,java,android,android-studio,progressdialog,Java,Android,Android Studio,Progressdialog,我试图在MainActivity中显示一个进度对话框,但这是不可能的: 该课程在我的主要活动中: class MyAsyncTask extends AsyncTask<Void, Integer, Void> { ProgressDialog progressDialog; private String titulo; private String mensaje; private MainActivity a
class MyAsyncTask extends AsyncTask<Void, Integer, Void> {
ProgressDialog progressDialog;
private String titulo;
private String mensaje;
private MainActivity activity;
public MyAsyncTask(MainActivity activity){
this.activity = activity;
}
@Override
protected Void doInBackground(Void... voids) {
this.activity.createDirs();
this.activity.copyAssets();
return null;
}
@Override
protected void onPreExecute() {
this.progressDialog = new ProgressDialog(MainActivity.this);
this.progressDialog.setTitle("test");
this.progressDialog.setMessage("test message...");
this.progressDialog.show();
Toast.makeText(MainActivity.this, "OPA", Toast.LENGTH_LONG).show();
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressDialog.dismiss();
}
}
类
MyAsyncTask
的方法doInBackground()
的代码正在顺利执行。非常感谢大家的建议。当您调用myAsyncTask.get()
时,您的线程被阻塞,这就是为什么您的进度对话框不显示的原因,所以请删除myAsyncTask.get()
并在onPostExecute
Intent intent = new Intent(MainActivity.this, Dashboardactivity.class);
startActivity(intent);
完整代码:
btnInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(flag==1){
myAsyncTask = new MyAsyncTask(new MainActivity());
myAsyncTask.execute();
flag=0;
}else{
Toast.makeText(MainActivity.this,"error", Toast.LENGTH_LONG).show();
}
}
在您的任务中:
class MyAsyncTask extends AsyncTask<Void, Integer, Void> {
ProgressDialog progressDialog;
private String titulo;
private String mensaje;
private MainActivity activity;
public MyAsyncTask(MainActivity activity){
this.activity = activity;
}
@Override
protected Void doInBackground(Void... voids) {
this.activity.createDirs();
this.activity.copyAssets();
return null;
}
@Override
protected void onPreExecute() {
this.progressDialog = new ProgressDialog(MainActivity.this);
this.progressDialog.setTitle("test");
this.progressDialog.setMessage("test message...");
this.progressDialog.show();
Toast.makeText(MainActivity.this, "OPA", Toast.LENGTH_LONG).show();
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressDialog.dismiss();
Intent intent = new Intent(MainActivity.this, Dashboardactivity.class);
startActivity(intent);
}
}
类MyAsyncTask扩展了AsyncTask{
进行对话进行对话;
私有字符串titulo;
私人字符串门萨耶;
私人活动;
公共MyAsyncTask(MainActivity活动){
这个。活动=活动;
}
@凌驾
受保护的空位背景(空位…空位){
this.activity.createDirs();
this.activity.copyAssets();
返回null;
}
@凌驾
受保护的void onPreExecute(){
this.progressDialog=新建progressDialog(MainActivity.this);
此.progressDialog.setTitle(“测试”);
这个.progressDialog.setMessage(“测试消息…”);
这个.progressDialog.show();
Toast.makeText(MainActivity.this,“OPA”,Toast.LENGTH_LONG.show();
super.onPreExecute();
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
progressDialog.disclose();
意向意向=新意向(MainActivity.this、Dashboardactivity.class);
星触觉(意向);
}
}
AsyncTask
和ProgressDialog
都不推荐使用;请考虑不要使用它们。除此之外,去掉myAsyncTask.get()
,并将代码移到onPostExecute()
。doInBackground函数需要多长时间?我用Thread.sleep(5000)
测试了你的代码,它可以正常工作,只需使用Thread.sleep()
来检查问题是在doInBackGround方法中还是在notHi@ShayKin和@commonware中谢谢你的评论。。doInBackground大约需要5秒钟这些函数正在创建一个目录到SD卡中,并将我的所有文件从我的资产文件夹复制到一个文件夹中..当它从onPreExecute
完成Toast时,只显示..@ShayKin I完成了myAsyncTask=new myAsyncTask(new main activity());myAsyncTask.execute();试试{Thread.sleep(8000)
但没有显示..非常奇怪这是我的完整代码:请检查..非常感谢.我添加了它:但没有显示..非常奇怪Hi@Shay Kin谢谢你的回答.我照你说的做了..现在onPreExecute的祝酒词显示得非常快,但仍然没有显示进度对话框.我不知道到底发生了什么事。我也在使用opencv和tesseract Library,我们得出结论,这两种方法是createDirs();
和copyAssets();
内部的doInBackground()
方法造成的问题。@Shay Kin的代码工作得很好。
class MyAsyncTask extends AsyncTask<Void, Integer, Void> {
ProgressDialog progressDialog;
private String titulo;
private String mensaje;
private MainActivity activity;
public MyAsyncTask(MainActivity activity){
this.activity = activity;
}
@Override
protected Void doInBackground(Void... voids) {
this.activity.createDirs();
this.activity.copyAssets();
return null;
}
@Override
protected void onPreExecute() {
this.progressDialog = new ProgressDialog(MainActivity.this);
this.progressDialog.setTitle("test");
this.progressDialog.setMessage("test message...");
this.progressDialog.show();
Toast.makeText(MainActivity.this, "OPA", Toast.LENGTH_LONG).show();
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
progressDialog.dismiss();
Intent intent = new Intent(MainActivity.this, Dashboardactivity.class);
startActivity(intent);
}
}