只是想知道,对于少数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);
这是正确的,绑定值2将作为空值而来,我们可以处理它。但是想知道为什么在大多数设备中我们没有观察到上述异常。
答案 0 :(得分:0)
可能是您的应用程序活动被Android操作系统杀死,并且当它从savedInstanceState重建时,它处于正确的状态。
当用户使用主页按钮切换到另一个应用程序(在退出应用程序之前不回来)时,可能会发生这种情况。当您的应用程序处于后台时,操作系统会破坏您的应用活动。 用户切换回您的应用后,将从savedInstanceState重新创建活动。
要模拟此方案,您可以使用设置>开发人员选项>选中“不要保留活动”选项,并使用主页按钮在屏幕上测试您的应用程序,然后恢复您的应用程序,看看您是否可以重现它。