android 常见的异常,Android 几个常见异常且容易被忽略的地方
一、空指针异常
private String str;
private void initView() {
int a = str.length();
Log.e("zpan","=========" + a);
}
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()'
on a null object reference
at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:28)
报空指针异常肯定是“.”前面的某个变量为空。这个比较容易排查。
空指针是Crash最常见的一种也是最容易被忽略的一种,后台返回数据为空的场景,防不胜防,只要是有可能为空的数据,最好在使用之前做一次判空处理,以减少崩溃的概率;还有代码执行顺序的场景,还没赋值就拿去用,肯定会报空指针等等。
方案:做好防护工作,逻辑梳理清晰来减少崩溃的发生。
二、类型转换异常
String str = "";
int a = Integer.valueOf(str);
Caused by: java.lang.NumberFormatException: Invalid int: ""
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:358)
at java.lang.Integer.parseInt(Integer.java:334)
at java.lang.Integer.valueOf(Integer.java:525)
at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:26)
有时候我们是需要针对 API 传的数据进行类型转换,那我们就不能保证 API 传的数据不为空,如果忽略了这种场景,那等待我们的就是 Crash。
方案:针对类型转换写一个类型安全转换的函数,即返回数据为空的时候,返回默认值。
private void initView() {
String str = "";
int a = String2Int(str, 0);
Log.e("zpan","=========" + a);
}
private int String2Int(String str, int defaulValue) {
if (TextUtils.isEmpty(str)) {
return defaulValue;
}
try {
return Integer.valueOf(str);
} catch (Exception e) {
return defaulValue;
}
}
将该函数放在 Utils 类中,以便复用。同理,long、double、String等类型的转化,都可以这样防护,减少崩溃。
三、下标越界
private String str = "abc";
private void initView() {
String a = str.substring(3,6);
Log.e("zpan","=========" + a);
}
Caused by: java.lang.StringIndexOutOfBoundsException: length=3; regionStart=3; regionLength=3
at java.lang.String.startEndAndLength(String.java:298)
at java.lang.String.substring(String.java:1087)
at com.example.zpdemo.activity.ZpYaoActivity.initView(ZpYaoActivity.java:28)
取值超过本身的长度的时候,就会报下标越界异常。API传数据的时候,并且要对字符串做二次处理,这个时候就要考虑字符串取值是否会越界的场景。不仅是字符串,数组和集合同理,也要考虑这种场景。
方案:对可能会出现这种场景的数据,做数据防护。
android 常见的异常,Android 几个常见异常且容易被忽略的地方相关推荐
- Android面试必过——Android常见的问题
Android常见的问题 标签(空格分隔): 移动开发 常见算法问题的 Java 实现 资料可见 算法介绍可见 算法是很多公司面试必须,国内 BAT 基本面试中都会有,尤以百度为盛. 常见设计模式的 ...
- Android开发——联系人中几种常见的mimetype、几张常见表的Uri
2个常见的Uri "content://com.android.contacts/raw_contacts" "content://com.android.contact ...
- [Android Studio]掌握Android Studio的五种常见控件和五种常见布局
目录 一.View和ViewGroup 二.Android的五种常见控件 2.1 文本控件 2.1.1 TextView 2.1.2 EditText 2.2 按钮控件 2.2.1 Button 2. ...
- Android M版本中gpio几种常见设定的pinctrl配置
Android M版本中gpio几种常见设定的pinctrl配置 [DESCRIPTION] pinctrl的配置file是<project>.dts 备注:配置是以mt6735上gpio ...
- Android布局文件错误,android 布局文件常见错误
1.'Missing contentDescription attribute on image' in XML 原因:缺少图片描述,在 ADT 16 开始会抛出这个警告,确保开发者为图片添加内容描述 ...
- android 特殊屏幕适配,Android屏幕适配(2)常见:第一种
前言: Android屏幕适配(1)基础知识篇 Android屏幕适配(3)常见:第二种 Android屏幕适配(4)常见:第三种 Android屏幕适配(5)常见:归纳总结 常见的屏幕配置问题(一些 ...
- android 设置风格主题,Android Theme 常见主题风格详解
本文为自己多年来在Android实战开发过程中总结归纳的一些常见问题,现在分享出来希望对初学者有所帮助. 目录 [1. 什么是Style,什么是Theme?] [2. 在定义Theme的时候@符号和? ...
- android问题总结报告,Android开发中常见的问题总结
1.在cmd命令行中输入android list target出现android不是内部或外部命令 新建一个环境变量ANDROID_HOME=你的sdk所在目录 然后在path中加入%ANDROID_ ...
- Android 8.1 中Systemui中的常见修改(六)NavigationBar加载流程
本文主要分为两个部分 一.NavigationBar的加载流程 二.Android P上如何去除NavigationBar 一 NavigationBar的加载流程 NavigationBar就是我们 ...
- Android测试最新框架,Android单元测试-常见的方案比较
前言 本文将介绍在Android Studio中,android单元测试的介绍和实现.相关代码托管在github上的AndroidJunitDemo中,涉及到的用例代码收集于google官方提供的测试 ...
最新文章
- 【漫画】以后在有面试官问你AVL树,你就把这篇文章扔给他。
- WebGIS中地图恢复初始位置及状态
- 【ArcGIS 10.2新特性】Geodatabase 10.2 常见问题
- anaconda python命令_Anaconda常用命令
- Python的小括号( )、中括号[ ]和大括号{}分别代表什么?
- RS485串口光端机产品功能特点介绍
- 【MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记】
- SAP License:SAP权限管理讲财务(二)-看懂财务报表
- Java 1.1.7 String API (!!!)
- C语言涉及数组的大作业,c语言大作业_基于数组的学生信息管理系统.doc
- 有没有换发型的软件?一分钟智能更换发型
- 模电——二级管的限幅与稳压
- 卸载office2007不干净问题
- 2012年8月22日
- 新注册第一帖----------------------乱码新手自学.net 之Linq 入门篇
- 这也能卖?拉美电商平台Mercado Libre上的10种奇葩产品
- RuntimeError: mat1 and mat2 shapes cannot be multiplied (192x64 and 4x3)
- android 自动发彩信,Android编程实现定时发短信功能示例
- 小冲哥c语言视频自学网,C语言二级教学视屏课件_51自学网_小冲哥.doc
- 服务器程序运行的相关操作
热门文章
- 通过angularjs的directive以及service来实现的列表页加载排序分页
- android守护进程
- Unity3d 调用C++写的DLL
- Mysql 导出导入
- 在lua中优雅的操作日期和时间
- 《物流与供应链管理》课程论文
- jquery学习笔记之选择器
- 孙鑫VC学习笔记:第十一讲 (五) 如何使窗口具有滚动条
- 拓端tecdat|R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
- 权威cpu测试软件,权威CPU测试软件更新 CPU-Z v1.40.5