当前位置: 代码迷 >> 综合 >> java.lang.RuntimeException:Can't toast on a thread that has not called Looper.prepare()
  详细解决方案

java.lang.RuntimeException:Can't toast on a thread that has not called Looper.prepare()

热度:84   发布时间:2023-11-17 10:53:43.0

项目刚上线,在友盟统计的数据看到闪退率达到2%以上,我擦。

 

    io.reactivex.c.f: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()
 

 

 

java.lang.RuntimeException:Can't toast on a thread that has not called Looper.prepare()io.reactivex.c.f: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()

问题是在子线程中去进行Toast操作。

 

怎么解决呢。只有在ToastUtils中直接使用主线程。

 

例如

   /*** 简单Toast 消息弹出*/public static void show(final String msg) {if (TextUtils.isEmpty(msg)) {return;}// 判断是否在主线程if (Looper.getMainLooper().getThread() != Thread.currentThread()) {QsHelper.getInstance().getThreadHelper().getMainThread().execute(new Runnable() {@Override public void run() {showToast(QsHelper.getInstance().getApplication(), msg, Toast.LENGTH_SHORT);}});} else {showToast(QsHelper.getInstance().getApplication(), msg, Toast.LENGTH_SHORT);}}

 

  相关解决方案