【发布时间】:2021-03-28 23:15:47
【问题描述】:
我试图在我的 MainActivity 中显示一个进度对话框,但这是不可能的: 这个类在 My MainActivity 中:
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();
}
}
这段代码在 My MainActivity.java 中:基本上,当用户按下一个按钮时,我正在创建一个对 MyAsyncTask 的引用并执行它。
btnInit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(flag==1){
myAsyncTask = new MyAsyncTask(new MainActivity());
myAsyncTask.execute();
try {
myAsyncTask.get();
}catch (Exception e){
}
Intent intent = new Intent(MainActivity.this, Dashboardactivity.class);
startActivity(intent);
flag=0;
}else{
Toast.makeText(MainActivity.this,"error", Toast.LENGTH_LONG).show();
}
}
类MyAsyncTask 的方法doInBackground() 的代码正在执行没有问题。我会感谢任何想法的家伙,非常感谢。
【问题讨论】:
-
AsyncTask和ProgressDialog均已弃用;请考虑不使用它们。除此之外,摆脱myAsyncTask.get()并将其后的代码移动到onPostExecute()。 -
doInBackground 函数需要多长时间?我使用
Thread.sleep(5000)测试了您的代码,它可以正常工作,只需尝试使用Thread.sleep()检查问题是否出在doInBackGround 方法中 -
嗨 @ShayKin 和 @CommonsWare 感谢您的 cmets.. doInBackground 大约需要 5 秒钟,这些函数正在将目录创建到 sdcard 并将我的所有文件从我的资产文件夹复制到一个文件夹..当它从
onPreExecute完成 Toast 仅显示.. -
@ShayKin 我做到了
myAsyncTask = new MyAsyncTask(new MainActivity()); myAsyncTask.execute(); try { Thread.sleep(8000);但没有显示.. 很奇怪这是我的完整代码:pastebin.com/tEJsjebM 请检查它.. 非常感谢。 -
我加了:imgur.com/a/lIsHaT5 但是没有出现..很奇怪
标签: java android android-studio progressdialog