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

2023-12-28 16:18

本文主要是介绍Android 报错:Can't create handler inside thread that has not called Looper.prepare(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  • 描述
  • 解决方法
    • 1
    • 2
    • 3
  • 完事

描述

这个错误发生在,我在子线程发起网络请求后处理返回的数据时,新建了一个Handler去处理。这是因为新建一个Handler是需要在主线程中,主线程是默认循环的,而子线程则不会。

解决方法

有三种方法吧

1

按照提示在新建Handler前放上一句Looper.prepare();,和之后放上Looper.loop();
使得子线程也开始循环;但是缺点就是子线程就不再会停止并且在闲时释放了。

2

将任务post回到主线程工作
也就是将新建Handler放回到主线程中新建,使用mainHandler.post(mRunable);将任务回调到主线程工作。但是缺点是,如果主线程和子线程不在同一个类文件中,我们就需要传递这个mainHandler到子线程的类文件,耦合高。

3

在子线程中新建一个新线程去完成任务。
由于我的任务是收到短信验证码后,开始倒计时60秒,才给用户再次点击获取验证码,所以我使用了这个方法,新建一个子线程去倒计时就好了。

                // 开始倒计时VerifyCodeCountdownTime = LoginConstant.REQ_CODE_TIME;// 保存DataCache.getInstance().getLoginManager().VerifyCodeCountdownTime = VerifyCodeCountdownTime;// 发送通知EventBus.getDefault().post(new SuperEvent(LoginTag.VERIFY_CODE_UPDATE_TIME));// 每隔1秒更新一下new Thread(new Runnable() {@Overridepublic void run() {for (int i = LoginConstant.REQ_CODE_TIME; i > 0; i--) {// 如果时间还大于0就继续减VerifyCodeCountdownTime = i;// 保存DataCache.getInstance().getLoginManager().VerifyCodeCountdownTime = VerifyCodeCountdownTime;// 发送通知EventBus.getDefault().post(new SuperEvent(LoginTag.VERIFY_CODE_UPDATE_TIME));// 线程休眠1秒try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}VerifyCodeCountdownTime = 0;}}).start();

完事

这篇关于Android 报错:Can't create handler inside thread that has not called Looper.prepare()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546533

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(