Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用一个AsyncTask类无法显示进度对话框_Java_Android_Android Studio_Progressdialog - Fatal编程技术网

Java 使用一个AsyncTask类无法显示进度对话框

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

我试图在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();
        }

    }

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);
        }

    }