3

デバイスの NPE でアプリがクラッシュしました。ACRA で受信したスタック トレースでは、行番号は 2 つのソース コード クラス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に同意しますが、おそらく何らかのnull値を渡しています。あなたがそれを手に入れたら、内部のものの世話はなくなるはずです。

行番号が異なる理由について。あなたは必要最低限​​のストックシステムのソースコードを見ています。それがデバイスや消費者の手に渡る頃には、かなり変更されている可能性がありますSQLiteDatabase。クラスでなぜ、何が変更されるのか具体的にはわかりませんが、何かが変更されたようです。

于 2012-11-26T15:36:22.940 に答える
1

Android の公式ソースがお使いの携帯電話の Android バージョンと一致するかどうかはわかりません。サムスンは独自の目的でアンドロイドを変更した可能性があると思います.サムスンの人たちはアンドロイド4.0.3ソースを取得し、それらを変更し、さまざまなクラスにいくつかのものを追加し(SQLiteDatabaseそれらの1つのようです)、それをビルドして独自のバージョンのアンドロイドを取得しました. Android のバージョンを示す定数は変更されていないため、「まだ」4.0.3 であることがわかります。

于 2012-11-26T15:45:21.533 に答える