Can't create handler inside thread that has not called Looper.prepare()

来源:互联网 发布:左程云面试算法指南 编辑:程序博客网 时间:2024/06/07 05:03

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

原因:Toast不能直接在子线程中调用显示

场景:在子线程中进行了数据操作,并且用handler发送刷新ui并打印Toast

原代码如下:

new Thread(new Runnable() {    public void run() {        try {            EMClient.getInstance().groupManager().addUsersToGroup(groupId, newmembers);                        Qiuutil.ShortToast("已经添加群成员");            listuser.get(position).put("1","1");            handler.sendEmptyMessageDelayed(2,500);                    } catch (Exception e) {            Qiuutil.ShortToast("添加失败");        }    }}).start();

报错之后加上Looper.prepare();Looper.loop();中包裹handler和Toast 就不会报错,代码如下:

new Thread(new Runnable() {    public void run() {        try {            EMClient.getInstance().groupManager().addUsersToGroup(groupId, newmembers);            Looper.prepare();            Qiuutil.ShortToast("已经添加群成员");            listuser.get(position).put("1","1");            handler.sendEmptyMessageDelayed(2,500);            Looper.loop();        } catch (Exception e) {            Qiuutil.ShortToast("添加失败");        }    }}).start();



阅读全文
0 0