只是想知道,对于少数Android设备,我们得到了下面提到的异常:
Caused by: java.lang.IllegalArgumentException: the bind value at index 2 is
null
at net.sqlcipher.database.SQLiteProgram.bindString(SourceFile:237)
at net.sqlcipher.database.SQLiteDatabase.updateWithOnConflict
(SourceFile:1794)
at net.sqlcipher.database.SQLiteDatabase.update(SourceFile:1730)
at com.sample.android.SQDBHelper.onUpgrade(SourceFile:276)
at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase
(SourceFile:123)
at com.sample.android.SQDBController.read(SourceFile:431)
at com.sample.android.ui.MainActivity.onCreate(SourceFile:42)
at android.app.Activity.performCreate(Activity.java:5372)
at android.app.Instrumentation.callActivityOnCreate
(Instrumentation.java:1104)
at android.app.ActivityThread.performLaunchActivity
示例代码
ContentValues contentValues = new ContentValues();
contentValues.put("COL_VALUE1", value1);
contentValues.put("COL_VALUE2", value2);
contentValues.put("COL_VALUE3", value3);
contentValues.put("COL_VALUE4", value4);
contentValues.put("COL_VALUE5", value5);
database.insert(DATA_TABLE, null, contentValues);
的确,bound value2是一个null值,我们可以处理它。然而,我们想知道为什么在大多数设备中我们没有观察到上述异常。
您的应用程序活动可能会被Android操作系统杀死,当它从savedInstanceState重建时,它的状态不正确。
当用户使用主页按钮切换到另一个应用程序时可能会发生这种情况(在退出应用程序之前不会返回)。当你的应用程序处于后台时,操作系统会破坏你的应用活动。一旦用户切换回您的应用程序,就会从savedInstanceState重新创建活动。
要模拟这种情况,您可以使用"设置">"开发人员选项">选中"不要保留活动"选项,并在屏幕上测试您的应用程序,使用主页按钮出现此错误,然后恢复您的应用,看看您是否可以复制它。