安卓子线程吐司问题- Can‘t create handler inside thread that has not called Looper.prepare()

在Android开发中,网络请求通常在子线程进行,而Toast提示需要在主线程。当尝试在子线程直接使用Toast时,会引发崩溃。错误信息提示未调用Looper.prepare()。解决方法是在子线程中通过Handler关联Looper,先调用Looper.prepare()初始化消息循环,再使用Looper.loop()启动循环。这样,Toast就能在主线程正确显示,避免程序崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天又看了看以前写的安卓实验,有一个问题一直没处理好,就是我在网络请求的时候,我根据返回的信息给出一些提示,常见的就是吐司,类似这种,可以更好的和人交互,但是当我把吐司写在网络请求中,程序就会直接崩溃掉,┭┮﹏┭┮

错误的信息是这样提示的:

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

翻译:无法在没有调用 Looper.prepare() 的线程中创建 handler

然后大概就是在子线程中使用toast,需要关联handler,然后handler调用looper.prepare这个方法。

 它用 Handler 只是为了用队列和时间控制排队显示吐司。

子主线程中没有开启Looper,而handler对象必须绑定Looper对象需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用。

因为安卓中,网络请求是放在子线程中的。在主线程中使用toast是不需要引用handler的。

将looper添加进去,

就能成功实现toast吐司提示了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值