Android初学者高频问题

Android初学者常用的解bug技巧
++同学们把自己遇到的问题在网站交流,有助于我们收集问题总结给大家。学习解决方法才是最重要的。++
adb命令如何截图?
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
window保存成.bat文件,然后执行即可。
如果是Mac/Linux,直接复制粘贴到终端即可。
PS:最好只有一个设备,因为没有加-s参数
如何抓log?
- logcat 抓取
这个简单
但是要注意的是,你向别人提问的时候,不要把log截图了,要复制内容再给别人,或者保存成文本。
- adb 命令抓取
adb logcat > log名称.log
比如说:
adb logcat > crash.log
那么输出的log在哪里呢?在你当前命令行窗口目录下。
PS:要注意的是,输入完命令,先回车,再去复现问题,确保出问题的时候,已经在抓log了。
接下来就是分析log了。
如何分析log?
分析log之前我们先了解一下log
log从何而来?
log,江湖上称之为日志。主要包括这几部分:
- 系统输出的log
- 你使用第三方框架输出的log
- 你自己写的log,比如说你在代码里Log.d(TAG,"xxx");
log的等级
- Verbose 详细的,推荐使用颜色白色
- Debug 调试信息,推荐使用绿色
- Info 通用信息,推荐使用蓝色
- Warning 警告信息,推荐使用黄色
- Error 错误信息,推荐使用红色
如何设置Log的颜色请阅读
通常来说,我们输出log的时候,按照这个等级去输出,则方便我们去看log,查问题。
推荐使用notepad++(抱歉只有windows版本)
notepad++搜索及关键字
notepad++特别方便,推荐大家使用,可以打开单个4G的文本log,查找速度也特别快,还支持android logcat插件。
- 搜索:
搜索有两个,一个是:在当前文件中查找;另外一个是:查找所有打开的文件。
如果你是做系统开发,会有多个log,单个达到一定大小以后,则创建新的log,比如说mtklog,则有main.log,main1.log....这些log是连续的,但分开成多个log文件保存。
所以如果多个文件的话,可以点击查找所有打开的文件,如果是单个文件则可以在当前文件中查找。
- 关键字
exception
exception是最经常使用的查找关键字,各种异常都会有这个关键字
error
错误,这个一般系统级的信息会有error
自定义关键字
自己输出的log中,自定义的TAG,这个时候就可以做为一个关键字搜索了
at + 包名
一般报错了,会告诉你错误的地方,在哪里呢?在at xxx.xxx.xx下面,所以at + 包名也是关键字
cause by
翻译过来就是由xxx引起的,这里面一般有具体的解决方法,报错原因
简单明显的问题
什么是简单,明显的问题呢?
比如说:
空指针异常
空指针的解决思路
首先我们要知道的是为什么会引发空指针一场,因为对象为空。那么问题就来了:为什么对象为空呢?
所以,同学们要明白的是对象的创建与使用时机,也就是说,发生空指针的时候
- 去找对象什么时候创建或者赋值;
- 去找控制针发生的地方;
- 如果对象为空时,不影响程序执行,可以加判空处理;
- 如果对象为空时,影响程序执行,则需要解决对象创建的时序问题。
参数非法异常
顾名思义,就是参数的问题,比如说这个问题:
很明显,参数传空了。
解决方法:根据提示去改即可,一般会提示你为什么参数不对。
类强转异常
类型强转异常,报错的时候会有提示说,xxxx类不能转成xxx类,这个时候去检查一下即可。
如何判断类是否可以强转呢?
使用instantceof来判断
如果分不清楚==,equals,instanceof的区别的同学们,先去了解一下了。我也找了同学去写相关的文章了。
数据库关闭读写异常
在数据库操作时,要养成使用完关闭的习惯。但也有同学整了个错误上来。
数据库相关操作要在关闭前执行。检查一下顺序就好,这一般是因为初学者比较粗心导致的。
没有权限
没有权限的时候,也会报错。
权限相关的请查看这篇文章
类/方法过时
类/方法过时,一般会有一横线,或者直接找不到了。
只是横线警告的话可以继续使用。或者按ctrl+鼠标点击进去看看里面的文档说明,一般会有告诉你用什么新类/方法替换的。
如果说新的jar包,新的api已经没有了,那你就得换方法,或者换回旧的Jar包/依赖了。
包/类冲突
解决方法:
- 先编译运行,让其报错;
- 根据报错信息,看看是包冲突还是类冲突;
- 根据报错信息去全局搜索,查看有没有相同的依赖,有的话干掉一个;
- 如果没有,可能是jar包里的依赖,那就得用ctrl+n搜索类,这个时候 一般可以搜索到多个同名同包类,只是在不同的依赖下。具体情况具体分析进行删减即可解决。
警告
程序员不怕警告,只怕error。
可解可不解,如果你跟我一样是处女座的,有强迫症。可以稍微解决一下。
解决方法:
- 鼠标放到警告的地方,会提示你为什么警告,顺势解决。
- 光标在警告的地方,按alt+回车,根据提示解决警告。
数据无法显示
TextView内容无法显示
解决方法:
- 检查字体颜色跟背景色是否一样了
- 检查是否有内容。
检查方式:设置背景,把内容作为log输出,或者借助LayoutInspector
RecyclerView内容无法显示
解决方法:
- 检查是否有设置布局管理器,没有设置则不显示内容
- 检查适配器是否有漏写返回item的个数以及是否有设置UI数据
- 检查数据是否有设置给适配器
ViewPager数据无法显示
- 检查适配器代码,是否有把item添加到容器里
- 检查适配器返回的item个数
- 检查是否有设置数据
如何提升自己解bug的能力?
- 学习英语,不要求会说会听,但要是会看,知道什么意思;
- 多帮助他人解答问题,不断积累经验,训练自己的职业敏感度;
- 自信,这个也是在解bug过程中建立起来的,解得多就越自信;
附录
如果同学们遇到问题在网站的提问模块发帖子吧,积累起来我们才能更好地收集问题,总结方案给大家学习。