1. 使用IDE快捷生成代码, 导致onCreate()方法引用错误,如图:
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_monitor);
}
此方法和程序入口onCreate一致,只不过参数多了一个,不过效果却大不相同,使用此方法,会导致界面无视图!!
2.SQLite数据库报android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1的错误
错误出现的情况,一般为查询获取到cursor后,直接获取数据。如下:
db = helper.getWritableDatabase();
Cursor cursor = db.rawQuery("select iccode from student where _id = 92", null);
String string = cursor.getString(0);
由于android中SQLite数据库处理使用Cursor时,游标不是放在为0处的下标,而是放在为-1处的下标开始的。
也就是说返回给cursor查询结果时,不能够马上从cursor中提取值,要判断是否为空,在moveToFirst或者moveToNext之后,再进行取值。
3.使用selector选择器点击无效果
放一个最近在用的边框选择器,把效果写在一起了
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list>
<!-- This is the line -->
<item>
<shape>
<padding
android:bottom="0dp"
android:left="0dp"
android:right="1dp"
android:top="1dp" />
<solid android:color="#ffffff" />
</shape>
</item>
<!-- This is the main color -->
<item>
<shape>
<solid android:color="#383838" />
</shape>
</item>
</layer-list>
</item>
<item android:state_pressed="true" >
<layer-list>
<!-- This is the line -->
<item>
<shape>
<!--定义边线-->
<padding
android:bottom="0dp"
android:left="0dp"
android:right="1dp"
android:top="1dp" />
<!--边线颜色-->
<solid android:color="#ffffff" />
</shape>
</item>
<!-- This is the main color -->
<item>
<!--定义主体样式-->
<shape>
<solid android:color="#f33030" />
</shape>
</item>
</layer-list>
</item>
</selector>
此时,在控件background添加,增加控件点击事件,会发现点击却没有想要的效果,这时若不在意选择器的条目顺序,可能找半天也发现不了什么错误。
问题就出在选择器中条目顺序的变化,在解析的时候,虚拟机会以从上到下的顺序解析,因为最顶部选择器的item中没有设置属性,所以会被系统认为为默认效果,
而不再读取下一条。修改方法即为把选择器中条目item属性为空的放在最后即可。
3.请不要犯把背景定义为白色,而又把文本颜色定义为同一种颜色,而抱怨文本显示不出来的错误。
4.空指针异常。这是一个老生长谈的问题,可惜问题却是依旧如见,尤其是在文本的地方上,检查机制特别重要。最后和后台配合的过程中,用户的注册帐号信息被删除,导致前端收到帐号number为空,原以为以这个为主键最不可能为空的数据却突然null,导致应用之前一直好好的,突然莫名崩溃。。。
5.不要把耗时任务写在主线程中。最近习惯用Rx写异步,在做图片选择器的时候,使用框架带的图片压缩方案不太如意,于是使用LuBan对获取到的图片再压缩,在使用时候,使用Rx链式调用,在使用flatMap关键词调用Obserable时,由于在最终调用端写了在io线程执行,便没在意在flatMap端的Obserable执行线程,导致界面一卡再卡数秒,检查时才发现问题。
6.出现问题要敢于啃源码。遇到的坑不想多谈了,框架都是人写的,相信你可以改进它。