1. 程式人生 > >Android錯誤記錄

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()); 

雖然item.getName()方法返回的是String型別但還是報上面的錯,抱著試試的心態將程式碼改為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是必須實現的。