当前位置:首页 > 移动端 > Android开发常见Exception汇总

Android开发常见Exception汇总

2022年08月05日 11:25:25移动端8


在我们进行开发中,难免会碰到各种Exception。再次记录和总结一下,希望对过路的你有所帮助。

Exception子子孙孙无穷尽也,我会不断新增内容补充完整,欢迎收藏,不断回顾

Java异常

1. ConcurrentModificationException异常

List<String> list = new ArrayList<>();
    list.add("di");
    String str = new String("da");
    list.add(str);
    list.add("paint");
    for(String temp : list){
     
        if(temp == "di" || temp == "da"){
     
            list.remove(temp);
        }
    }
System.out.print(list.toString());

会抛出ConcurrentModificationException异常,List不可在进行遍历时添加或移除其中的元素。

源码解析:ArrayList的父类AbstractList中有一个modCount成员变量来记录对List的修改次数,还有一个expectedModCount记录对ArrayList修改次数的期望值,modCount是它的初始值。

遍历开始时modCount与expectedModCount都为0,而当我们在遍历中对List进行了add或remove操作后modCount会增加1,expectedModCount不变。
而List在通过next()方法取下一次值时会先检查modCount与expectedModCount是否相等,不等则会抛出ConcurrentModificationException异常。

单线程中解决方案:使用Iterator遍历集合,调用Iterator的remove方法移除元素,其内部有expectedModCount = modCount的操作。

多线程中解决方案:多线程中使用上述方法也会抛出此异常,可在使用iterator迭代的时候使用synchronized或者Lock进行同步,或使用CopyOnWriteArrayList替换ArrayList。

总结
在for循环中进行集合元素的增删要特备注意,上面提供了两种不同线程情况的解决方案,我补充的一点是用for-- 的操作方案,也可以正常操作运行。

Android异常

1. SourceSet with name ‘main’ not found

在Android想进行代码运行测试,使用main方法进行一些方法调用测试,发现不能使用,报如下错误。
Android开发常见Exception汇总 _ JavaClub全栈架构师技术笔记
解决方案:
在项目.idea文件夹gradle.xml文件中添加一项配置参数。

   <option name="delegatedBuild" value="false" />

Android开发常见Exception汇总 _ JavaClub全栈架构师技术笔记

2. IllegalStateException: This Activity already has an action bar supplied by the window decor

Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
Android开发常见Exception汇总 _ JavaClub全栈架构师技术笔记
报错异常信息翻译就是Activity的Window 已经为你提供了一个ActionBar,如果你想用toolbar,那么你需要在theme中设置windowActionBar=false。

异常的原因

  1. 这是我的theme配置
    Android开发常见Exception汇总 _ JavaClub全栈架构师技术笔记
  2. 这是我的Activity的layout
    Android开发常见Exception汇总 _ JavaClub全栈架构师技术笔记
    Toolbar和actionBar不能在同一Window中出现,只能二者择其一

解决方案
因为我需要使用Toobar,所以只能去掉ActionBar。
使用Theme.AppCompat.Light.NoActionBar
Android开发常见Exception汇总 _ JavaClub全栈架构师技术笔记

3. java.io.IOException: unexpected end of stream on Connection 196.*******

在Okhttp+retrofit中碰到此问题,造成该异常是因为client 与 server之间创建连接后未断开,下次请求就会出现这样的情况,要解决这种情况两种方案:

  1. 服务器配置client请求成功后,断开与与其的TCP连接
  2. 在Retroift中配置addHeader(“Connection”, “close”).build();
	OkhttpBuild .addNetworkInterceptor(getCacheIntercepter())
 
    private Interceptor getCacheIntercepter() {
     
        return chain -> {
     
//            Request request = chain.request();
			//上面的屏蔽化成下面一句
            Request request = chain.request().newBuilder().addHeader("Connection", "close").build();

如上两种方法是我截止发稿时间找到的方法,如有更好方案请联系我。

4.Android Studio debug模式下代码不显示变量值

在app的 build.gradle文件中别忘记了配置 debuggable=ture。不然你会发现打断点时看不到断点的变量值。
Android开发常见Exception汇总 _ JavaClub全栈架构师技术笔记

5. Android NDK开发 .cpp文件报红

Android开发常见Exception汇总 _ JavaClub全栈架构师技术笔记
该问题一般是Android Studio 的build版本与cmake版本不一致导致的,解决方法请详细阅读我的博文《Android Studio 4.0+NDK开发 This files is not part of the project》

总结

在Android开发中我们总会遇到各种奇奇怪怪的Exception,Android开发经验就是建立在解决Bug,解决Exception之上的,当你能熟练定位各种Bug和Exception,并能知晓造成原因和有效解决之后,恭喜你,你向技术大神的神坛又迈进了一大步。

博客书写不易,如觉得文章还行,请您点个赞 ^ _ ^ !

作者:luo_boke
来源链接:https://blog.csdn.net/luo_boke/article/details/106349481

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/mobile/17526.html

分享给朋友:

“Android开发常见Exception汇总” 的相关文章

Flutter设置App的应用名字和应用logo图标的方法(android ios web)

Flutter设置App的应用名字和应用logo图标的方法(android ios web)

在前面的几期给大家介绍了flutter的安装以及一些简单的配置,还运行了helloword 那么接下来就带领大家了解如何设置应用名称以及图标 Flutter设置App的应用名字和应用logo图标的方法, 知识点虽然简单,但是不知道这个知...

解决 There is no getter for property named ‘null‘ in class 的报错异常

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There i...

Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)

Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)

Flutter Web项目 Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升,支持 Web、macOS、Android 和 iOS。 这就是为什么今天我们使用在 Web、macOS 应用、Android 和 iOS 应...

Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序(文末送书)

Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序。 作者:坚果 公众号:“大前端之旅” 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端...

浅谈java异常[Exception]

一. 异常的定义 在《java编程思想》中这样定义 异常:阻止当前方法或作用域继续执行的问题。虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常。绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败。之所以java要...

mac android wifi调试

mac android wifi调试 1,用USB连接你的手机: 2,打开命令行输入: adb tcpip 5555; 结果: MacBook-Pro:~ user$ adb tcpip 5555;restarting in...

Android UI(四)云通讯录项目之云端更新进度条实现

Android UI(四)云通讯录项目之云端更新进度条实现

作者:泥沙砖瓦浆木匠 网站:http://blog.csdn.net/jeffli1993 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。 交流QQ群:【编程之美 365234583】http://jq.qq.com/?_wv=1027&k=XVfB...

Android Studio开发flutter快捷键

Android Studio开发flutter快捷键 下面是android studio开发flutter快捷键的一些总结,非常实用,掌握后能明显提高编码速度和编码质量: 1、快速创建widget:在dart文件中输入stf或stl出现提示后按回车...

Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框

Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框

Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框 作者:泥沙砖瓦浆木匠 网站:http://blog.csdn.net/jeffli1993 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。...

Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling

Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 为什么要全局异常处理? WebFlux REST 全局异常处理实战 小结 摘录...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。