Android代码里Toast如何在子线程中调用
来源:互联网 发布:季后赛数据统计 编辑:程序博客网 时间:2024/05/22 19:29
在我们写Android代码时,不可避免会在子线程中调用toast,在写代码的时候不会报错,但是当你运行程序时,在这个toast显示的时候就会报错:
12-19 09:43:17.822 3076-3141/com.yuchung.shenghuo E/AndroidRuntime: FATAL EXCEPTION: Thread-143
Process: com.xxxxx.xxxxx PID: 3076
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.widget.Toast$TN.<init>(Toast.java:327)
at android.widget.Toast.<init>(Toast.java:92)
at android.widget.Toast.makeText(Toast.java:241)
at com.yuchung.shenghuo.View.User_Register$1.run(User_Register.java:118)
at java.lang.Thread.run(Thread.java:841)
这个错误显示是looper对象的原因,但很多人不会去看报错都会直接以为是toast属于ui所以不能再子线程中更新。
android的主线程中其android框架已经默认给出了一个looper对象, 而我们自己创建的子线程中,looper对象需要自己给构建出来。这也就是为什么我们在子线程中使用Toast
的时候会报出上图异常。。(如果不明白Toast为什么在子线程使用需要Looper对象的可自己观察源码)
解决方案:
既然已经知道了问题是如何产生的, 那么我们现在就只需要在我们的子线程中把Toast所需要的Looper对象给创建出来就可以了。
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(TwoActivity.this, "子线程显示", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}).start();
- Android代码里Toast如何在子线程中调用
- Android中Toast如何在子线程中调用
- Android中Toast如何在子线程中调用
- Android中Toast如何在子线程中调用
- 在子线程中Toast
- 在子线程中Toast
- android如何在子线程中弹出Toast
- Android开发之在子线程中使用Toast
- Android-在子线程中显示Toast和Dialog
- Android Toast在子线程中为什么无法正常使用
- android 在子线程中使用Toast等功能
- 如何在子线程弹Toast
- Android在子线程使用Toast
- Android 子线程中Toast的问题
- Android 子线程中使用Toast
- Toast执行完makeText之后的代码不执行(子线程中调用Toast显示异常分析)
- android 子线程 Toast
- 子线程中Toast
- mongo数据库迁移和备份还原
- [机器学习] Coursera ML笔记
- struts2配置之全局result及异常处理
- 【SMS】SMS协议介绍之短消息中心(SC)
- 图像语义分析学习(一):图像语义分割的概念与原理以及常用的方法
- Android代码里Toast如何在子线程中调用
- Windows10下的docker安装与入门 (一)使用docker toolbox安装docker
- OpenJDK的编译(Deepin15 平台)
- 淘宝开放平台 获取商品信息api权限获取
- 接口文档格式
- VC中如何显示一张位图
- “大海捞针”式相关性分析的错误
- Python中给List添加元素的4种方法分享
- 固定大小容器中显示图片,图片缩放后显示中间位置,不变型的实现。