在Async中使用Toast

 Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()  

在报错的方法前加Looper.prepare(); 
方法末尾加Looper.loop();

在async里面调用toast时候 会报错 toast前后加就可以解决

但是问题来了 loop是一个循环 如果是你要在toast后面还要执行 这种方式就不可行


你需要这样

public void toast(final String s)
   {
       Handler handler=new Handler(Looper.getMainLooper());
       handler.post(
               new Runnable() {
                   @Override
                   public void run() {
                       Toast.makeText(context,s,Toast.LENGTH_SHORT).show();
                   }
               }
       );

使用handler发送一个消息  然后在async中调用 toast(str); 就可以解决了

好的,针对你的问题,可以在请求拦截器设置一个定时器,用来控制toast的显示时间。 具体的实现方法如下: ```javascript import axios from 'axios'; import { Toast } from 'vant'; // 创建axios实例 const instance = axios.create({ baseURL: 'http://api.example.com', timeout: 5000 }); // 请求拦截器 instance.interceptors.request.use(config => { // 显示toast Toast.loading({ message: '加载...', duration: 0 // duration 为 0 时,toast 不会消失 }); // 返回请求配置 return config; }, error => { // 请求错误处理 return Promise.reject(error); }); // 响应拦截器 instance.interceptors.response.use(response => { // 清除toast Toast.clear(); // 返回响应结果 return response; }, error => { // 响应错误处理 Toast.clear(); return Promise.reject(error); }); export default instance; ``` 在请求拦截器,我们使用vant的`Toast`组件显示了一个正在加载的提示,同时设置了duration为0,使得toast不会自动消失。在响应拦截器,我们清除了toast。 如果你想要控制toast的显示时间,可以在页面使用`setTimeout`函数,手动控制toast的消失时间,例如: ```javascript import request from '@/utils/request'; export default { async getUserInfo() { try { const res = await request.get('/user/info'); setTimeout(() => { Toast.clear(); }, 2000); // 2秒后消失 return res.data; } catch (error) { console.error(error); } } }; ``` 以上是一种简单的实现方式,如果你想要实现更复杂的需求,可以参考vant官方文档toast组件说明进行自定义的设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值