我的应用因设备上的 NPE 而崩溃。在 ACRA 收到的堆栈跟踪中,行号指的是两个源代码类,SQLiteStatement
和SQLiteDatabase
. 对于SQLiteDatabase
,没有任何行号与任何源代码版本中的行号匹配。我的设备没有自定义 ROM。这是运行 Android 4.03 的 Galaxy S2。
这是堆栈跟踪:
java.lang.NullPointerException
at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:290)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:96)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:2025)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1965)
at android.database.sqlite.SQLiteDatabase.beginTransaction(SQLiteDatabase.java:690)
at android.database.sqlite.SQLiteDatabase.beginTransactionNonExclusive(SQLiteDatabase.java:605)
at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:247)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:112)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1844)
at com.mydomain.myapp.albums.AlbumsData.insertOrIgnore(AlbumsData.java:89)
如果您查看其不同版本SQLiteDataBase
的来源,您可以自己检查数字不匹配。
例如,在 Android 4.03 的SQLiteDataBase
source中,executesql(...)
位于第 1892 行,而我的堆栈跟踪显示它位于第 2025 行。
这怎么可能?
(请注意,我不是在询问 NPE 的来源)