Android中Crash(闪退,崩溃)的一般问题与解决方案

Crash Exception 在Android 中经常会遇到,那么遇到异常我们该如何解决,本文将举例解决部分Android看法中遇到的异常。

  1. NullPointerException 空指针
  2. ClassCastException 类型转换异常
  3. IndexOutOfBoundsException 下标越界异常
  4. ActivityNotFoundException Activity未找到异常
  5. IllegalStateException 非法状态异常
  6. ArrayIndexOutOfBoundsException 数组越界异常
  7. SecurityException 安全异常

1. NullPointerException 空指针

NullPointerException在开发中经常会碰到,比如引用的对象为空,数组为空等。

    1. 数组 NullPointerException

不能向一个null数组元素赋值,获取长度,否则报
NullPointerException: Attempt to write to null array
NullPointerException Attempt to get length of null array,以下代码会引起上面两种空指针异常。

数组NullPointerException 代码举例

NullPointerException 代码举例

数组NullPointerException Log 举例

  • Log 信息如下

第一次 NullPointerException 如下

 
  1. 12-27 17:17:44.627 8839 8839 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to get length of null array

  2. 12-27 17:17:44.627 8839 8839 E AndroidRuntime: at com.programandroid.Exception.NullPointerException.ArrayNullPointer(NullPointerException.java:32)

Log 分析如下

数组NullPointerException

第二次NullPointerException 如下

 
  1. 12-27 17:23:24.168 11649 11649 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to write to null array

  2. 12-27 17:23:24.168 11649 11649 E AndroidRuntime: at com.programandroid.Exception.NullPointerException.ArrayNullPointer(NullPointerException.java:34)

  3. 12-27 17:23:24.168 11649 11649 E AndroidRuntime: at com.programandroid.Exception.ExceptionActivity.NullPointerException(ExceptionActivity.java:37)

Log 分析如下

null 数组元素赋值异常

    1. Object 对象 NullPointerException

对象空指针,是因为引用一个null 对象,进而导致空指针,常报以下错误
Attempt to invoke a virtual method on a null object reference,以下代码可能会引起空指针异常。

object 对象 NullPointerException 代码举例

Object 对象 NullPointerException

object 对象 NullPointerException log 举例

  • Log 信息如下:
 
  1. 12-27 17:28:22.565 12725 12725 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke a virtual method on a null object reference

  2. 12-27 17:28:22.565 12725 12725 E AndroidRuntime: at com.programandroid.Exception.NullPointerException.ListNullPointer(NullPointerException.java:45)

  3. 12-27 17:28:22.565 12725 12725 E AndroidRuntime: at com.programandroid.Exception.ExceptionActivity.NullPointerException(ExceptionActivity.java:37)

object 对象 NullPointerException Log 分析如下:

Object NullPointerException

NullPointerException 解决方案

    1. 使用时多注意判断对象是否为空

使用对象是,最好判断对象是否为空

    1. 使用try-catch将抛出的异常抓住

try-catch 代码异常,防止app crash

    1. 终极解决方案,优化代码逻辑,从根本上解决问题。

2. ClassCastException 类型转换异常

ClassCastException 类型转换异常:
此异常发生在类型转换时,并且在编译期间,编译器不会提示报错,但是当运行时,如果存在此异常,可能会导致app崩溃 crash
比如当发生以下情况时,类型转换异常就会发生

  1. 父类强制转换为子类时,ClassCastException 就会发生

1. 以下代码 会引起 ClassCastException

ClassCastException 代码举例

ClassCastException 类型转换异常举例

ClassCastException Log 举例

ClassCastException通常会打印以下类似信息

 
  1. Caused by: java.lang.ClassCastException:

  2. com.programandroid.Exception.ExceptionActivity$

  3. Fruit cannot be cast to com.programandroid.Exception.ExceptionActivity$Apple

ClassCastException Log 分析

ClassCastException log 分析

ClassCastException 解决方案

使用try-catch抓住异常,或者从代码上解决根本问题。

使用 try-catch抓住 ClassCastException异常

2. Android 手机 Settings ClassCastException 解决方案

举例是为了更好的解决开发中的异常。比如在开发中,使用 monkey 测试Settings模块时,报出的 ClassCastExceptionSettings代码比较多,一时也无法看完,此时,try-catch 也是一种不错的选择。
比如monkey测试某平台代码时,报出以下异常

Settings ClassCastException Log 举例

  • log 信息如下:
 
  1. FATAL EXCEPTION: ApplicationsState.Loader

  2. 01-05 03:36:56.101 6304 6941 E AndroidRuntime: Process: com.android.settings, PID: 6304

  3. 01-05 03:36:56.101 6304 6941 E AndroidRuntime: java.lang.ClassCastException:

  4. com.android.settings.datausage.AppStateDataUsageBridge$DataUsageState

  5. cannot be cast to com.android.settings.notification.NotificationBackend$AppRow

  6.  
  7. 01-05 03:36:56.101 6304 6941 E AndroidRuntime: at com.android.settings.applications.AppStateNotificationBridge$3.filterApp(AppStateNotificationBridge.java:110)

Settings ClassCastException Log分析

Settings ClassCastException Log1

Settings ClassCastException Log2

Setting crash ClassCastException 解决方案:

try-catch 异常报错的地方

try-catch 异常报错的地方

try-catch 异常报错的地方

3. IndexOutOfBoundsException 下标越界异常

List 在开发中经常会被用的,那么错误的使用下标,将会导致IndexOutOfBoundsException越界异常。以下代码就会引起IndexOutOfBoundsException异常

IndexOutOfBoundsException 代码举例

IndexOutOfBoundsException 异常举例

IndexOutOfBoundsException Log举例

  • Log 信息如下:
 
  1. 12-27 17:41:24.231 16891 16891 E AndroidRuntime: Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

  2. 12-27 17:41:24.231 16891 16891 E AndroidRuntime: at java.util.ArrayList.get(ArrayList.java:411)

  3. 12-27 17:41:24.231 16891 16891 E AndroidRuntime: at com.programandroid.Exception.IndexOutOfBoundsException.isAppOnRecent(IndexOutOfBoundsException.java:40)

  4. 12-27 17:41:24.231 16891 16891 E AndroidRuntime: at com.programandroid.Exception.ExceptionActivity.IndexOutOfBoundsException(ExceptionActivity.java:80)

Log 分析如下:

IndexOutOfBoundsException Log分析

IndexOutOfBoundsException 解决方案

在使用时判断对象内容是否为0.

使用判断List 的size是否为0

4. ActivityNotFoundException

ActivityNotFoundException 常见于Eclipse 开发Android中,Android studio 已经帮忙自动生成Activity,以及布局文件。
主要原因是未在AndroidMainfest.xml文件中注册,如未注册,会引起app crash ,crash log如下:
ActivityNotFoundException: Unable to find explicit activity class

ActivityNotFoundException 代码举例

比如以下代码会引起此异常

 

Activity未在Androidmainfest.xml 中注册会引起ActivityNotFoundException

ActivityNotFoundException Log 举例

  • Log信息如下:
 
  1. 12-27 17:46:05.994 17893 17893 E AndroidRuntime: Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.programandroid/com.programandroid.Test.TestActivity}; have you declared this activity in your AndroidManifest.xml?

  2. 12-27 17:46:05.994 17893 17893 E AndroidRuntime: at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1810)

Log 分析如下:

ActivityNotFoundException Log分析

ActivityNotFoundException 解决方案

AndroidMainfest.xml中注册即可

四大组件一定,一定要在AndroidMainfest.xml 中注册

 

5. IllegalStateException

IllegalStateException 非法状态异常,是因为软件中代码状态非法导致的。
以下代码会引起IllegalStateException 。当Button控件声明android:onClick="IllegalStateException" 却未在Java代码中使用时,点击Button,就会出现此类异常。

IllegalStateException 代码举例

IllegalStateException 代码举例

IllegalStateException Log 举例

  • log信息如下:
 
  1. 12-27 16:07:41.158 1715 1715 E AndroidRuntime: FATAL EXCEPTION: main

  2. 12-27 16:07:41.158 1715 1715 E AndroidRuntime: Process: com.programandroid, PID: 1715

  3. 12-27 16:07:41.158 1715 1715 E AndroidRuntime: java.lang.IllegalStateException:

  4. Could not find method IllegalStateException(View) in a parent

  5. or ancestor Context for android:onClick attribute defined on view class

  6. android.widget.Button with id 'btn_on_click'

  7. 12-27 16:07:41.158 1715 1715 E AndroidRuntime: at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:4781)

  8. 12-27 16:07:41.158 1715 1715 E AndroidRuntime: at android.view.View$DeclaredOnClickListener.onClick(View.java:4740)

IllegalStateException Log分析如下:

IllegalStateException Log截图

IllegalStateException 解决方案

IllegalStateException 类异常很多,不同的代码会有不同的解决方案,上述举例解决方案如下

IllegalStateException

 

6 . ArrayIndexOutOfBoundsException 数组越界异常

数组在代码中经常被用到,当适用数组下标不当时,就会出现ArrayIndexOutOfBoundsException。比如数组长度为4,但你要引用下标为5的元素,这时候,就会异常crash

ArrayIndexOutOfBoundsException 代码举例:

ArrayIndexOutOfBoundsException 代码举例

ArrayIndexOutOfBoundsException Log举例:

  • Log信息如下:
 
  1. 12-27 17:51:15.420 19185 19185 E AndroidRuntime: Caused by: java.lang.ArrayIndexOutOfBoundsException: length=4; index=5

  2. 12-27 17:51:15.420 19185 19185 E AndroidRuntime: at com.programandroid.Exception.ArrayIndexOutOfBoundsException.ArrayIndexOutOfBounds(ArrayIndexOutOfBoundsException.java:20)

  3. 12-27 17:51:15.420 19185 19185 E AndroidRuntime: at com.programandroid.Exception.ExceptionActivity.ArrayIndexOutOfBoundsException(ExceptionActivity.java:105)

  4. 12-27 17:51:15.420 19185 19185 E AndroidRuntime: ... 11 more

ArrayIndexOutOfBoundsException Log分析如下:

ArrayIndexOutOfBoundsException Log分析

ArrayIndexOutOfBoundsException解决方案

    1. 正确使用数组下标
    1. 如果不确定数组长度,请先获取长度,然后在判断下标是否大于等于数组长度。
    1. try-catch 抓住异常,防止crash,但不能从根本上解决问题。

7. SecurityException 安全异常

SecurityException 安全异常在Android 中也会经常发生,主要是Android 的安全机制原因造成的,为了管理应用获取手机的一些敏感信息,Android安全机制规定,必须在AndroidMainfest.xml 文件中声明,并且,Android 6.0之后,获取手机敏感信息时候,需要动态申请权限,只有用户授权后才可以获取手机敏感信息。

SecurityException 代码举例

获取手机的IMEI 号属于手机的敏感信息

 

获取手机IMEI号

SecurityException log举例

 
  1. 12-27 18:05:55.663 21467 21467 E AndroidRuntime: Caused by: java.lang.SecurityException: getDeviceId: Neither user 10117 nor current process has android.permission.READ_PHONE_STATE.

  2. 12-27 18:05:55.663 21467 21467 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1683)

  3. 12-27 18:05:55.663 21467 21467 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1636)

  4. 12-27 18:05:55.663 21467 21467 E AndroidRuntime: at com.android.internal.telephony.ITelephony$Stub$Proxy.getDeviceId(ITelephony.java:4281)

SecurityException log 分析

SecurityException log 分析

SecurityException 解决方案

Android 6.0之前,在AndroidMainfest.xml中申请权限即可,
Android 6.0 之后,请动态申请权限。

AndroidMainfest.xml 中申请权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65068.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快来在win10上提前体验小爱同学吧!

小爱同学发布win10UWP版相信很多人都已经知道了,下面便教大家安装小爱同学! 1.打开win10开发者模式 2.点击安装包并安装 1.点击安装包 2.再点击下图安装即可 部分演示 和小娜一样以浮窗形式弹出小娜支持快捷键和语音唤醒;小爱在红米笔记…

学会这些AI工具,一个人也能开公司!

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号,领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇:2T架构师学习资料干货分享 大家好,我是互联网架构师&…

加拿大目前华人数量

加拿大目前华人数量有多少,结果惊人! 2018-09-11 16:56 很多同学和家长选择加拿大,都是为了优质的教育,适宜的生活环境慕名而来,由于在早些年,加拿大已有很多华人到当地移民生活,到现在,不同…

【加拿大签证】加拿大工签/工作许可work permit 办理流程【官方详细完整,加拿大访问学者必看】

加拿大工签办理流程。 魁北克省的访问学者也需要办理工作签证,即需要办理工作许可work permit,其中主要涉及魁北克大学、麦吉尔大学、蒙特利尔大学、康考迪亚大学等相关大学的访问学者。 Work permit: About the process 工作许可流程 大多数外国人在…

【加拿大签证】加拿大签证相片要求 【来自加拿大政府官方最新要求,看这一篇就够了】

加拿大签证相片要求 详情请参阅小册子 brochure (PDF, 494 KB) (PDF, 505.82KB),以取得更多相片范例。 脸部必须对着镜头呈方形,表情要中性,既不皱眉也不微笑,嘴巴要闭上。如果照片不符合规格,您必须提供新的照片&…

CSC联合培养加拿大工签攻略

最近有人问我加拿大签证的事,当时我写了攻略,现在放到博客上吧,希望能帮到大家。 本人申请了CSC联合培养博士项目,听外导说加拿大的工签需要三个月才出签,所以在提交了CSC申请材料后(CSC还没出结果&#x…

【加拿大签证】加拿大访问学者签证所需材料【加拿大访学签证,超详细,看一篇就够了】

1、加拿大签证均无需参加面试,不强制预约但建议您先进行预约再去提交; 2、加拿大不分领区,所有申请人可以在北京、上海、广州和重庆等地中心递交申请; 3、对于60岁以上的申请者使馆可能会抽查要求前往指定的医院进行体检。 加拿大…

加拿大签证办理时解释信Explanation of Letter参考

加拿大签证办理时的解释信,也称肉麻信参考。 Explanation of Letter Mar 8th,2017 Dear Canada Visa Officer, I am the applicant, WANG HONG(王洪). I am writing this letter with great pleasure. I like travelling. During the past …

免费送书 | 从AIGC到AGI:AGI是新一轮的投资机遇吗?

ChatGPT 的“横空出世”让普罗大众对人工智能的突破有了新的认识,人们第一次看到人工智能系统能够完成各种各样的事情,不论是需要常识的闲聊,还是需要专业知识的论文写作,甚至写代码都在话下。ChatGPT 出现后,人们开始…

ChatGPT的底层逻辑,你清楚吗

传说中的扫地僧,在现实中极其罕见。 有些僧,只是在假装扫地;而绝大多数“扫地僧”,并非真正的高僧。 电影《心灵捕手》讲述了这样一个少年天才,清洁工“呆萌”在大学拖地板时,解出了麻省理工学院数学系教…

科研快讯 | 14篇论文被信号处理领域顶级国际会议ICASSP录用

ICASSP 2023 近日,2023年IEEE声学、语音与信号处理国际会议(2023 IEEE International Conference on Acoustics, Speech, and Signal Processing,ICASSP 2023)发布录用通知,清华大学人机语音交互实验室(TH…

2022ChinaVis会议笔记

ChinaVis2022会议记录 7.22课程一、基于OBE理念的可视化教学探索与实践课程二、图布局基础、方法及应用 7.23一、大会特邀报告1二、圆桌论坛1:人文遇见可视化三、专题03交互可视化四、安全可视化五、论文报告2AI4VIS 7.24一、可视化工具与平台二、Multi-dimensional…

【OpenCall】ICASSP2023通用会议理解及生成挑战赛邀请函

ICASSP2023 通用会议理解及生成挑战赛(General Meeting Understanding and Generation Challenge,缩写为 MUG)是ICASSP2023 系列大挑战(SPGC)之一,由魔搭ModelScope社区、阿里巴巴达摩院语音实验室&语言技术实验室,阿里云天池联合浙江大学数字媒体计…

学术会议参会经验分享上(参会前的准备工作)

前前后后参加了两次学术会议,一次是今年三月份在深圳,另一次是在五月份在南宁,并且两次都进行了主题演讲。总的来说,我感觉参加学术会议重要的是自身能力的提升,比如说演讲、PPT制作等更方面的能力。下面我来分享一些我…

杭州内推 | 网易互娱AI Lab招聘NLP算法工程师、图形/图像算法实习生

合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 网易互娱AI Lab 网易互娱AI Lab成立于2017年,是专注于游戏领域的人工智能实验室…

天猫精灵连接蓝牙摸索1 关于阿里巴巴蓝牙MESH芯片TG7100B LINUX 开发环境塔建图文说明

天猫精灵连接蓝牙摸索1 关于阿里巴巴蓝牙MESH芯片TG7100B LINUX 开发环境塔建图文说明 环境搭建好后,再结合我的第二篇博文,可以实现以下效果(点击可以查看第二篇博文): 天猫精灵连接蓝牙摸索2-TG7100B安装好LINUX编译…

当你和天猫精灵对话时,它在想什么?阿里智能对话技术深度解读

摘要: 术语对齐 TaskBot引擎: 核心处理对象是“技能”,我们把技能定义成结构化(querycontent)、垂直场景化的任务,比如实时场景查询、工具类、控制类等QABot引擎:包括KG-QA引擎、QAPair引擎、DeepQA引擎。 术语对齐 Ta…

三个步骤教你如何通过天猫精灵控制智汀,实现不同生态设备相互联动

我们在市面或某宝上看到很多智能设备,但是是隶属于不同智能家居品牌的,而智能家居品牌和生态之间是不互通,不兼容的;也就是说,虽然都能被智能生态语音控制,但是设备之间是有办法联动的,除非你买…

基于巴法云平台的天猫精灵控制开关

天猫精灵已经出来很久了,因为他的语音识比较精准,所以很多智能家居的开发者想通过天猫精灵来控制一些家电。于是天猫精灵,小度音响等一些列具有语音识别功能的音响问世。我了解到的最多的还是支持天猫精灵和小度音响。 今天讲的是利用巴法云来…

马云推出的“天猫精灵”到底有多牛? 细思极恐怖

这个时代的变化有多莫测? 开网店、改变银行的马云,搞起了机器人! 搞搜索、做地图的百度,完成了无人驾驶! 马云又打响一枪 马云大动作不断。三个重磅后,今天又打了对手一个措手不对。 天猫精灵——马云为…