Android开发报错 Can't create handler inside thread that has not called Looper.prepare()

时间:2022-03-03 20:41:47

原因分析:在线程中调用了Toast(或者Dialog提示)。

解决方法:在调用Toast(或者AlertDialog)的地方的前面加上Looper.prepare(),后边加上Looper.loop()即可解决问题;也就是说用Looper.prepare()和Looper.loop()把Toast前后包起来。


Looper.loop()会死循环堵塞线程

其他解决方案:

在主线程中定义handler,

然后在子线程中用handler.post如下:

new Runnable(){
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(mApp.getApplicationContext(),"服务器异常,请稍后重试",Toast.LENGTH_SHORT).show();
}
});
}
}.run();