Android 固定Can';t在未调用Looper.prepare()的线程内创建处理程序

Android 固定Can';t在未调用Looper.prepare()的线程内创建处理程序,android,multithreading,Android,Multithreading,编辑: 我是在我线程中的stack overflow朋友的帮助下这样做的,在android中显示对话框中的视频视图,但它冻结了我的应用程序,提前向我表示感谢 这是我在线程中的活动: Auto_Bucket_Tests_Thread = new Thread(new Runnable() { @SuppressWarnings("deprecation") @Override public void run

编辑: 我是在我线程中的stack overflow朋友的帮助下这样做的,在android中显示对话框中的视频视图,但它冻结了我的应用程序,提前向我表示感谢

这是我在线程中的活动:

Auto_Bucket_Tests_Thread = new Thread(new Runnable() 
        {

            @SuppressWarnings("deprecation")
            @Override
            public void run() {

                while(Test_Completed==false)
                {
                    if(Login.Bucket_Status==true && Video_Status==false)
                    {

                        new Handler(Looper.getMainLooper()).post(new Runnable() {

                            @Override
                            public void run() {
                                Bucket_Open_Error();

                            }
                        });
                    }
                    else if(Login.Bucket_Status==false && Video_Status==true)
                    {
                    videodialog.cancel();   
                    }
                }
                Auto_Bucket_Tests_Thread.stop();
            }
        });

     }



        protected void Bucket_Open_Error() {
        videodialog = new Dialog(this);
        videodialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        videodialog.setContentView(R.layout.videodialog);
        videodialog.show();
        WindowManager.LayoutParams layout_params =new WindowManager.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        layout_params.copyFrom(videodialog.getWindow().getAttributes());
        layout_params.dimAmount=0;
        videodialog.getWindow().setAttributes(layout_params);

        final VideoView video = (VideoView)videodialog.findViewById(R.id.videoView_dialog);

        Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.doorsclosing);
        video.setVideoURI(uri);
        video.start();
        video.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

            public void onCompletion(MediaPlayer mp) {
                Video_Status=true;
                video.start();
                //app_message.show();


            }
    });

您正在尝试从后台线程创建处理程序。如果你不希望处理程序与UI线程通信,那么创建一个不同的线程而不是处理程序。如果您希望处理程序与UI线程通信,则需要向构造函数传递一个循环器

新处理程序(Looper.getMainLooper())

编辑:替换

runOnUiThread

新处理程序(Looper.getMainLooper()).post


runOnUiThread是一种活动方法,它创建一个处理程序并在UI线程中发布Runnable,但由于您在后台线程上运行(创建了新线程并运行了它),您不能像这样发布到UI,因为新处理程序与UI没有连接(因此didint调用Looper prepare execption).

很抱歉,我没有收到回音,你能不能请你再告诉我一次怎么做,因为我是@EE66Dude的新手,我确实喜欢你说的,但它冻结了应用程序请帮助我,我在@ee66上面发布了我的代码,请随时更改为If。你已经打开了多个视频。这就是为什么你坚持你的UI线程我的坏。不要删除while,只要更改test completeK dude的值,我用你的答案解决了它,我没有更改while的值,谢谢你的帮助dude@EE66