java.lang.IllegalArgumentException:索引2处的绑定值为null

时间:2014-04-23 07:14:42

标签: android sqlite illegalargumentexception

只是想知道,对于少数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将作为空值而来,我们可以处理它。但是想知道为什么在大多数设备中我们没有观察到上述异常。

1 个答案:

答案 0 :(得分:0)

可能是您的应用程序活动被Android操作系统杀死,并且当它从savedInstanceState重建时,它处于正确的状态。

当用户使用主页按钮切换到另一个应用程序(在退出应用程序之前不回来)时,可能会发生这种情况。当您的应用程序处于后台时,操作系统会破坏您的应用活动。 用户切换回您的应用后,将从savedInstanceState重新创建活动。

要模拟此方案,您可以使用设置>开发人员选项>选中“不要保留活动”选项,并使用主页按钮在屏幕上测试您的应用程序,然后恢复您的应用程序,看看您是否可以重现它。