无法在未调用 Looper 的线程内创建处理程序 [重复]

Posted

技术标签:

【中文标题】无法在未调用 Looper 的线程内创建处理程序 [重复]【英文标题】:Can't create handler inside thread that has not called Looper [duplicate] 【发布时间】:2013-08-30 09:46:52 【问题描述】:

我收到以下错误:

08-27 17:49:17.995: E/androidRuntime(10085): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
08-27 17:49:17.995: E/AndroidRuntime(10085):    at android.os.Handler.<init>(Handler.java:121)
08-27 17:49:17.995: E/AndroidRuntime(10085):    at android.widget.Toast$TN.<init>(Toast.java:361)
08-27 17:49:17.995: E/AndroidRuntime(10085):    at android.widget.Toast.<init>(Toast.java:97)
08-27 17:49:17.995: E/AndroidRuntime(10085):    at android.widget.Toast.makeText(Toast.java:254)

运行第一行时:

public static void alertUser(String str) 
    Toast toast = Toast.makeText(mInstance.getApplicationContext(), str,
            Toast.LENGTH_LONG);
    toast.show();


我该如何解决这个问题?

【问题讨论】:

好像你正在从一个线程更新用户界面 【参考方案1】:

这样的事情应该可以工作:

public static void alertUser(String str) 

runOnUiThread(setErrorMessage); 




private Runnable setErrorMessage = new Runnable() 
    @Override
    public void run() 

        Toast toast = Toast.makeText(mInstance.getApplicationContext(), str,
        Toast.LENGTH_LONG);
toast.show();
    
;

【讨论】:

但在这个答案上,他们提出了其他建议:***.com/questions/18467470/…

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

无法在未调用 Looper 的线程内创建处理程序 [重复]

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

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

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

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

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