首页 > 解决方案 > 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);

他们两个有关系吗?我真的很困惑,请帮助。先感谢您。

标签: javaandroid

解决方案


String[] selectionArgs = new String[]{IDLevel,Jenis};

您的选择参数之一为空。在创建查询之前添加一个空检查。

if (IDLevel == null || Jenis == null) {
    return null;   // Add error handling as required
}
String[] selectionArgs = new String[]{IDLevel,Jenis};

推荐阅读