简体   繁体   English

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

[英]Progress Dialog impossible to show using one AsyncTask class

I'm trying to show one Progress Dialog inside my MainActivity but is impossible: This class is inside My MainActivity:我试图在我的 MainActivity 中显示一个进度对话框,但这是不可能的:这个 class 在我的 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();
        }

    }

This code is inside My MainActivity.java: Basically when the user press one button I'm creating one reference to my MyAsyncTask and executing it.此代码位于 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();

                }
            }

The code of the method doInBackground() of the class MyAsyncTask is being executed without problems. class MyAsyncTask的方法doInBackground()的代码正在执行,没有问题。 I will appreciate any idea guys, thanks so much.我会很感激任何想法的家伙,非常感谢。

Your thread is blocked, when you call myAsyncTask.get() that's why your Progress Dialog is not displayed so remove the myAsyncTask.get() and add those line on onPostExecute当您调用myAsyncTask.get()时,您的线程被阻止,这就是您的进度对话框未显示的原因,因此请删除myAsyncTask.get()并将这些行添加到onPostExecute

Intent intent = new Intent(MainActivity.this, Dashboardactivity.class);
                    startActivity(intent);

full code:完整代码:

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

and on your asyncTask:在你的 asyncTask 上:

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

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM