Android錯誤記錄
在此記錄一下android開發過程中遇到的錯誤,以備今後的查閱。
錯誤1:Android: R cannot be resolved to a variable
原因:自動生成的R檔案被刪除或不完整
解決方法:
1. 檢查Android 的SDK是否丟失,需要重新下載,檢查build path
2. 確保class沒有import Android.R
3.錯誤class引用的layout的xml檔案沒有錯誤,xml檔名沒有大寫字母(這個是我一直在犯卻一直記不住的錯誤)
4. 檢查AndroidManifest.xml檔案,裡邊的package,layout配置檔案,strings.xml等的字串全部書寫正確
5. layout的xml檔案中引用的strings.xml中的字串拼寫完全正確
6.在layout 的xml檔案新增一個控制元件,看id能否在R.java中自動生成,如果不能,那很大可能就是這個layout 的xml檔案有問題,檢視格式是否使用正確,或者包含什麼非法字串,或者呼叫到了不正確的字串等等,可以使用排除法,挨個去掉控制元件,直到發現error message消失或者id能在R.java中自動生成。
7.刪掉gen資料夾,使R.java重新自動生成一次,如果不能生成,繼續檢查layout的xml檔案是否有如上不易發覺的問題
8.Clean project ,重新build,或者重新import project
9.重啟eclipse
10.重啟電腦,以防Android 虛擬機器的問題
錯誤2:gson格式化日期不規範導致javascript無法解析日期的問題
解決方法:Gson gson = new GsonBuilder().setDateFormat("yyyyMMddHHmmss").create();
錯誤3:android.content.res.Resources$NotFoundException:String resource ID #0x86
原因:給一個控制元件設定文字屬性時,屬性值必須為字串
解決方法:原始碼為textview.setText( item.getName());
錯誤4:android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1
原因:遊標cursor的下標是從-1開始的。
解決方法:cursor.moveToNext();
錯誤5:error inserting:column id is not unique
原因:在SQLite中插入資料時如果違反了unique約束就會報上面的錯誤
解決方法:採用insertWithOnConflict(String table, String nullColumnHack, ContentValues initialValues, int conflictAlgorithm)方法,通過最後一個引數conflictAlgorithm來定製衝突發生時的解決方法。
錯誤6:android java.lang.IllegalStateException:database not open
原因:沒有將資料庫開啟,即在操作資料庫之前呼叫了db.close(),或者未通過getWritableDatabase()或getReadableDatabase()獲取SQLiteDatabase物件。
解決方法:註釋掉db.close(),呼叫getWritableDatabase()或getReadableDatabase()。這個錯誤是在第二次開啟app時產生的,我一直找不到錯誤原因,因為db.close()是在主activity的onDestroy()中呼叫的。後來我才發現我將DBHelper設為單例模式,只在第一次建立DBHelper物件時才通過getWritableDatabase()或getReadableDatabase()獲取SQLiteDatabase物件,在每次呼叫DBHelper時獲取SQLiteDatabase物件就將錯誤解決了。
錯誤7:The import com.google can not be resolved
原因:build target應該選擇Google APIs而不是Android APIs。
解決方法:右鍵專案名稱 -> 屬性 -> Android,在Project Build Target中選擇相應的Google APIs。
錯誤8:Binary XML file line #6: Error inflating class com.example.mymapdemo.MyMapView
原因:1.XML檔案的第6行,引用自定義控制元件的包名錯誤。
2.自定義控制元件中的建構函式錯誤。
解決方法:
1.引用自定義控制元件在XML檔案中作為佈局元素時必須使用控制元件的完整路徑名稱,即包名+類名。如果使用ctrl+滑鼠點選可以跳轉到控制元件定義的地方,就是正確的引用。
2.自定義View必須實現基類View的三個建構函式:
View(Context context) //Simple constructor to use when creating a view from code
View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML
View(Context context, AttributeSet attrs, int defStyle) //Perform inflation from XML and apply a class-specific base style
第二個和第三個建構函式對於使用XML檔案inflate的View是必須實現的。