Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Android ProgressDialog未显示,即使我正在为任务使用线程_Android_Multithreading_Progressdialog - Fatal编程技术网

Android ProgressDialog未显示,即使我正在为任务使用线程

Android ProgressDialog未显示,即使我正在为任务使用线程,android,multithreading,progressdialog,Android,Multithreading,Progressdialog,我有这样一个(在onCreate()方法中): 我已经看过了这里的每一篇教程和每一个答案。他们每个人都说你必须做pDialog.show();就在这项耗时的任务之前,但显然我遗漏了一些东西,因为pDialog从未显示过 你能帮我把它展示出来,并在if中消除它吗 多谢各位 编辑: 可能与我调用show()方法和FloatingActionButton的onClick()方法中的所有内容有关)如果UI在某个点被阻止,对话框将不会显示 行thread.join()正在阻止您的UI线程 尝试使用Asyn

我有这样一个(在onCreate()方法中):

我已经看过了这里的每一篇教程和每一个答案。他们每个人都说你必须做pDialog.show();就在这项耗时的任务之前,但显然我遗漏了一些东西,因为pDialog从未显示过

你能帮我把它展示出来,并在if中消除它吗

多谢各位

编辑:


可能与我调用show()方法和FloatingActionButton的onClick()方法中的所有内容有关)

如果UI在某个点被阻止,对话框将不会显示

thread.join()正在阻止您的UI线程


尝试使用AsyncTask而不是线程,并启用AsyncTask.onPostExecute()线程终止后要执行的代码。

如果UI在某个点被阻止,则不会显示对话框

thread.join()正在阻止您的UI线程


尝试使用AsyncTask而不是线程,并启用AsyncTask.onPostExecute()线程终止后要执行的代码。

要呈现任何UI部件活动,OnCreate()函数调用必须完成

由于您试图在同一个函数中显示和隐藏进度对话框,因此它不会产生在屏幕上显示的效果

另外,通过执行thread.join(),您正在阻止主要威胁,这会阻止OnCreate()完成,并导致在OnCreate()中显示和隐藏进度对话框


解决方案:尝试在没有线程的线程上执行timeConsumingTask()。join()并使用runOnUiThread()方法对线程本身隐藏progressDialog,以呈现任何UI部件活动OnCreate()函数调用必须完成

由于您试图在同一个函数中显示和隐藏进度对话框,因此它不会产生在屏幕上显示的效果

另外,通过执行thread.join(),您正在阻止主要威胁,这会阻止OnCreate()完成,并导致在OnCreate()中显示和隐藏进度对话框


解决方案:尝试在没有线程的线程上执行timeConsumingTask()。join()并使用runOnUiThread()方法对线程本身隐藏progressDialog

能否请在此处发布pDialog对象初始化代码?当然,我要编辑我的问题。Diloag是一个UI组件,应该与主UI线程一起使用,而不是后台线程。它显示在主线程中。你能在这里发布pDialog对象初始化代码吗?当然,我将编辑我的问题。Diloag是一个UI组件,应该与主UI线程一起使用,而不是与后台线程一起使用。它显示在主线程中。删除join();将if移动到另一个方法(从thread()内部调用)就成功了。此外,我还必须消除runonuithread方法中的pDialog()。你的回答使我步入正轨。非常感谢。移除连接();将if移动到另一个方法(从thread()内部调用)就成功了。此外,我还必须消除runonuithread方法中的pDialog()。你的回答使我步入正轨。非常感谢。
                    private ProgressDialog pDialog; //(this is in the header)
                    .
                    . 
                    .
                    //This is onCreate() method
                    pDialog=new ProgressDialog(MenuActivity.this);
                    pDialog.setMessage(getString(R.string.downloading));
                    pDialog.setCancelable(false);
                    ...some lines of code...
                    pDialog.show();
                    Thread thread = new Thread(new Runnable() {
                        @Override
                        public void run() {
                            resultados=timeConsumingTask();
                        }
                    });
                    thread.start();
                    try {
                        thread.join();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    if(resultados.contains(1)){
                        if(pDialog!=null){
                            if(pDialog.isShowing()){
                                pDialog.dismiss();
                            }
                        }
                        doSomething();
                    }else{
                        if(pDialog!=null){
                            if(pDialog.isShowing()){
                                pDialog.dismiss();
                            }
                        }
                        doOtherThing();
                    {