无法在未调用 Looper.prepare()-Alertdialogbox 的线程内创建处理程序 [重复]

Posted

技术标签:

【中文标题】无法在未调用 Looper.prepare()-Alertdialogbox 的线程内创建处理程序 [重复]【英文标题】:Can't create handler inside thread that has not called Looper.prepare()-Alertdialogbox [duplicate] 【发布时间】:2012-11-27 19:56:38 【问题描述】:

可能重复:Can’t create handler inside thread that has not called Looper.prepare()

我想在线程中调用alertdialogbox如下

    public class connect implements Runnable
     
     public void run()  //run method

    

        AlertDialog.Builder alert = new AlertDialog.Builder(cordovaExample.activity);

        alert.setTitle("Confirm");
        alert.setMessage("Are you sure?");

        alert.setPositiveButton("YES", new DialogInterface.OnClickListener() 

            public void onClick(DialogInterface dialog, int which) 
                // Do nothing but close the dialog

                dialog.dismiss();
            

        );

        alert.setNegativeButton("NO", new DialogInterface.OnClickListener() 

            public void onClick(DialogInterface dialog, int which) 
                // Do nothing
                dialog.dismiss();
            
        );

        AlertDialog s = alert.create();
        alert.show();
       
     

我从以下活动中调用此线程

public class cordovaExample extends DroidGap

    Context mcontext;

    public static cordovaExample activity;
private static MediaPlayer  music=null;
    @Override
    public void onCreate(Bundle savedInstanceState)

        
            super.onCreate(savedInstanceState);

            activity=this;

                             super.init();



                   new Thread(new connect(this)).start();

                     
                

但它给出错误 无法在未调用 Looper.prepare() 的线程内创建处理程序

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

在App UI线程中写下这一行

 alert.show();

类似的东西

MainActivity.this.runOnUiThread(new Runnable() 

        public void run() 
              alert.show();

        
    );

【讨论】:

【参考方案2】:

你不能在线程运行时对 ui 进行更改。如果你想这样做,请使用 Handler 或 runOnUiThead 或最好的选择是使用 AsyncTask。

【讨论】:

以上是关于无法在未调用 Looper.prepare()-Alertdialogbox 的线程内创建处理程序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

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

无法在未调用 Looper.prepare()-Alertdialogbox 的线程内创建处理程序 [重复]

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

原因:无法在未调用 Looper.prepare() 的线程上敬酒

运行时异常“无法在未调用 looper.prepare() 的线程内创建处理程序”