那些年踩過的坑 android開發致命的錯誤合集

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

發佈了32 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章