为了账号安全,请及时绑定邮箱和手机立即绑定

无法在未调用Looper.prepare()的线程内创建处理程序

无法在未调用Looper.prepare()的线程内创建处理程序

鸿蒙传说 2019-10-17 10:36:27
我有一个活动,并在那里上了一堂课。text=new Dynamictext(...);text.setText("txt");在我的DynamicText Java中,我有以下代码:public void setText(String text) {    this.text=text;    new asyncCreateText().execute();    //this.createText(text);}//private Handler handler = new Handler();private class asyncCreateText extends AsyncTask<Void, Void, Void> {    @Override    protected Void doInBackground(Void... unused) {        return null;    }    @Override    protected void onPostExecute(Void unused) {    }}我得到:ERROR / AndroidRuntime(5176):原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序如何处理此错误?ERROR/AndroidRuntime(5370): java.lang.ExceptionInInitializerErrorERROR/AndroidRuntime(5370):     at com.l.start.DynamicText.setText(DynamicText.java:125)ERROR/AndroidRuntime(5370):     at com.l.start.OpenGLRenderer.initfonts(OpenGLRenderer.java:168)ERROR/AndroidRuntime(5370):     at com.l.start.OpenGLRenderer.init(OpenGLRenderer.java:119)ERROR/AndroidRuntime(5370):     at com.l.start.OpenGLRenderer.onSurfaceChanged(OpenGLRenderer.java:90)ERROR/AndroidRuntime(5370):     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1120)ERROR/AndroidRuntime(5370):     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:975)ERROR/AndroidRuntime(5370): Caused by: java.lang.RuntimeException:     Can't create handler inside thread that has not called Looper.prepare()ERROR/AndroidRuntime(5370):     at android.os.Handler.<init>(Handler.java:121)ERROR/AndroidRuntime(5370):     at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)ERROR/AndroidRuntime(5370):     at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)ERROR/AndroidRuntime(5370):     at android.os.AsyncTask.<clinit>(AsyncTask.java:152)ERROR/AndroidRuntime(5370):     ... 6 more
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

您可以通过这种方式在后台线程中创建处理程序


private void createHandler() {

        Thread thread = new Thread() {

          public void run() {

               Looper.prepare();


               final Handler handler = new Handler();

               handler.postDelayed(new Runnable() {

                    @Override

                    public void run() {

                       // Do Work

                        handler.removeCallbacks(this);

                        Looper.myLooper().quit();

                   }

                }, 2000);


                Looper.loop();

            }

        };

        thread.start();

    }


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 468 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信