3

我的应用因设备上的 NPE 而崩溃。在 ACRA 收到的堆栈跟踪中,行号指的是两个源代码类,SQLiteStatementSQLiteDatabase. 对于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 的SQLiteDataBasesource中,executesql(...)位于第 1892 行,而我的堆栈跟踪显示它位于第 2025 行。

这怎么可能?

(请注意,我不是在询问 NPE 的来源)

4

2 回答 2

2

所有内部错误都是由代码中的这一行引起的:

com.mydomain.myapp.albums.AlbumsData.insertOrIgnore(AlbumsData.java:89)

你需要去看看它发生了什么。我同意@323go,您可能正在向它传递某种空值。一旦你得到照顾,内部的东西就应该消失了。

至于为什么行号不同。您正在查看基本的库存系统源代码。当它进入设备并进入消费者手中时,它可能已经发生了相当大的变化,我不知道具体为什么或他们会在SQLiteDatabase课堂上改变什么,但似乎他们已经改变了一些东西。

于 2012-11-26T15:36:22.940 回答
1

我不确定官方的 android 资源是否与您手机上的 android 版本匹配。我认为三星可能会出于自己的目的改变 android:三星人采用了 android 4.0.3 源,对其进行了修改,向不同的类添加了一些东西(SQLiteDatabase似乎是其中之一),然后构建它并获得了他们自己的 android 版本。他们没有修改显示 android 版本的常量,因此您可以看到它“仍然”是 4.0.3。

于 2012-11-26T15:45:21.533 回答