java - java.lang.IllegalArgumentException : 运行 Android Studio 应用程序时,索引 1 处的绑定值为 null
问题描述
我是 Android Studio 的新手,我正在尝试在 Android Studio 中制作一个简单的测验应用程序,我正在学习教程,同时更改一些东西以适应我想要的东西。有一条错误消息说:
')',或预期的逗号,得到 '1'
当我运行它时,它说 android.database.sqlite.SQLiteException: near ": syntax error (code 1):
当我清理项目并重建它时,它会更改为另一个错误代码。
这是错误代码:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.exsple.localdbkebin, PID: 12335
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.exsple.localdbkebin/com.exsple.localdbkebin.Reading}: java.lang.IllegalArgumentException: the bind value at index 1 is null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2791)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1574)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6364)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1076)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:937)
Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null
at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164)
at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1348)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1195)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1066)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1234)
at com.exsple.localdbkebin.DBHelper.getQwithCriteria(DBHelper.java:209)
at com.exsple.localdbkebin.Reading.onCreate(Reading.java:44)
at android.app.Activity.performCreate(Activity.java:6695)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1124)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2744)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1574)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6364)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1076)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:937)
这是 getQwithCriteria 方法:
public ArrayList<Pertanyaan> getQwithCriteria(String IDLevel, String Jenis){
ArrayList<Pertanyaan> qList = new ArrayList<>();
db = getReadableDatabase();
String selection = QuestionsTable.COLUMN_IDLEVEL + " LIKE ? " +
" AND " + QuestionsTable.COLUMN_JENIS + " = ? ";
String[] selectionArgs = new String[]{IDLevel,Jenis};
Cursor c = db.query(
QuestionsTable.TABLE_NAME,
null,
selection,
selectionArgs,
null,
null,
null
);
这是阅读类中的 OnCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reading);
txtQCount = findViewById(R.id.txtQCount);
txtPertanyaan = findViewById(R.id.txtSoal);
rbGroup = findViewById(R.id.radio_group);
rb1 = findViewById(R.id.radio_button1);
rb2 = findViewById(R.id.radio_button2);
rb3 = findViewById(R.id.radio_button3);
rb4 = findViewById(R.id.radio_button4);
btnNext = findViewById(R.id.btnEnter);
Intent i = getIntent();
String levelID = i.getStringExtra("Level");
String jenis = i.getStringExtra("Choice");
DBHelper dbh = DBHelper.getInstance(this);
qList = dbh.getQwithCriteria(levelID,jenis);
他们两个有关系吗?我真的很困惑,请帮助。先感谢您。
解决方案
String[] selectionArgs = new String[]{IDLevel,Jenis};
您的选择参数之一为空。在创建查询之前添加一个空检查。
if (IDLevel == null || Jenis == null) {
return null; // Add error handling as required
}
String[] selectionArgs = new String[]{IDLevel,Jenis};
推荐阅读
- python - 如何创建受限制的 Python 子集?
- powershell - 如何在不停止进程的情况下正确关闭记事本++窗口?
- python - 构建一个更小的 python 额外包
- javascript - Navbar-Toogle Bootstrap 5 不工作(使用 Angular 材质)
- c# - 比键入多个 else if 语句更快的方法
- google-sheets - 在 Google 表格的 QUERY 数据范围内包含迷你图
- jquery - 更新后无法让 jQuery Plugin Backstretch 加载图像
- sql - 如何常规高效地左连接并将结果存储在原始表中?
- deployment - 为什么我的 Azure DevOps Server CD 中没有收到待批准通知?
- javascript - 在 GEE 中使用循环创建用于图像统计的 .csv 表