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.出現問題要敢於啃源碼。遇到的坑不想多談了,框架都是人寫的,相信你可以改進它。