首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引%1处的绑定值为Null

索引%1处的绑定值为Null
EN

Stack Overflow用户
提问于 2013-02-16 05:51:44
回答 2查看 4.8K关注 0票数 1

在我的应用程序中,我有一个列表,其中显示了每个患者的就医记录,该列表显示了他们的姓名和治疗日期。我想要能够点击一个特定的条目,并让它进入编辑屏幕。

应用程序会正确添加新条目,它会正确列出条目,但当我从列表中选择一个条目时,我会看到unable to start activity,消息是索引1处的绑定值为空

我的代码如下

来构建我从中选择的列表

代码语言:javascript
复制
public void fillMedicalList(String editPatientToGet){
    //sql Query
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(Medical.MEDICAL_TABLE_NAME );

    // build the return columns
    String asColumnsToReturn[]= {
            Medical.MEDICAL_TABLE_NAME + "." + Medical.MEDICAL_PATIENTID,
            Medical.MEDICAL_TABLE_NAME + "." + Medical.MEDICAL_PATIENT_GROUP,
            Medical.MEDICAL_TABLE_NAME + "." + Medical.MEDICAL_TREATMENT_DATE,
            Medical.MEDICAL_TABLE_NAME + "." + Medical.MEDICAL_TREATMENT,
            Medical.MEDICAL_TABLE_NAME + "." + Medical._ID}; 
    //end of build columns to return

    //build the where clause - find entries based on patient id
    String valueToFind[] = {editPatientToGet};

    //build the cursor
    mCursor = queryBuilder.query(mDB, asColumnsToReturn, Medical.MEDICAL_PATIENTID + "=?", valueToFind,
            null, null, null);

    //manage the cursor
    startManagingCursor(mCursor);

    //use an adapter to bind the data to the listview
    MedicalListAdapter adapter = new MedicalListAdapter(this, mCursor);
    ListView av = (ListView) findViewById(R.id.medical_list);
    av.setAdapter(adapter);

现在我开始收听列表中某项的点击

代码语言:javascript
复制
    av.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            final long editMedicalid = id;
            String WhatRecordIsIt = String.valueOf(editMedicalid);

            Log.i("who is it", WhatRecordIsIt);
            Log.d(DEBUG_TAG,WhatRecordIsIt);

            editMedical(editMedicalid);

        } //end of onClick for an item in the list
    }); //end of OnItemClick Listener
} //end of fill PATIENTItem list

此时,我的Log.i信息显示它具有正确的记录ID。

现在我的editMedical(editMedicalid)代码如下

代码语言:javascript
复制
    //we've clicked on a patient in the List list and now we're editing it
public void editMedical(Long id){
    String astrArgs[] = {id.toString()};

    String EditColumnsToReturn[]={
            Medical.MEDICAL_TABLE_NAME + "." + Medical.MEDICAL_PATIENTID,
            Medical.MEDICAL_TABLE_NAME + "." + Medical.MEDICAL_PATIENT_GROUP,
            Medical.MEDICAL_TABLE_NAME + "." + Medical.MEDICAL_TREATMENT_DATE,
            Medical.MEDICAL_TABLE_NAME + "." + Medical.MEDICAL_TREATMENT,
            Medical.MEDICAL_TABLE_NAME + "." + Medical._ID}; 

    Cursor c = mDB.query(Medical.MEDICAL_TABLE_NAME, EditColumnsToReturn,
            Medical._ID + "=?", astrArgs, null, null, null, null);

    c.moveToFirst();        
    final String strMedicalName =
        c.getString(c.getColumnIndex(Medical.MEDICAL_PATIENTID));
    Log.i("Patient's Name Is", strMedicalName);
    Log.d(DEBUG_TAG,strMedicalName);

    final String strMedicalType =
        c.getString(c.getColumnIndex(Medical.MEDICAL_PATIENT_GROUP));
    Log.i("what group", strMedicalType);
    Log.d(DEBUG_TAG,strMedicalType);

    final String strMedicalTreatmentDate =
        c.getString(c.getColumnIndex(Medical.MEDICAL_TREATMENT_DATE));
    Log.i("date", strMedicalTreatmentDate);
    Log.d(DEBUG_TAG,strMedicalTreatmentDate);

    final String strMedicalTreatment =
        c.getString(c.getColumnIndex(Medical.MEDICAL_TREATMENT));

    Log.i("treatment was", strMedicalTreatment);
    Log.d(DEBUG_TAG,strMedicalTreatment);

    final Long MedicalId =
        c.getLong(c.getColumnIndex(Medical._ID));

        String CurrentPatient = String.valueOf(MedicalId);

       Log.i("Patient ID is", CurrentPatient);

   Intent editMedical = new Intent(MedicalListActivity.this,
           EditMedicalActivity.class);

   editMedical.putExtra("patientName", strMedicalName);
   editMedical.putExtra("patientGroup", strMedicalType);
   editMedical.putExtra("treatmentDate", strMedicalTreatmentDate);
   editMedical.putExtra("medicalTreatment", strMedicalTreatment);
   String strCurrentPatient = String.valueOf(MedicalId);
   editMedical.putExtra("medicalId", strCurrentPatient);
   MedicalListActivity.this.startActivity(editMedical);

} //End of getting data needed to edit the record

我的log.i显示了正在收集的正确数据,但此时我得到错误,它无法启动我的EditMedicalActivity,因为索引1处的绑定值为空

我一遍又一遍地读我的代码,找不到我的错误。

LogCat

代码语言:javascript
复制
02-15 15:33:35.769: E/AndroidRuntime(20339): FATAL EXCEPTION: main
02-15 15:33:35.769: E/AndroidRuntime(20339): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.agmsi.medical/com.agmsi.medical.EditMedicalActivity}: java.lang.IllegalArgumentException: the bind value at index 1 is null
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.os.Looper.loop(Looper.java:130)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.app.ActivityThread.main(ActivityThread.java:3687)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at java.lang.reflect.Method.invokeNative(Native Method)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at java.lang.reflect.Method.invoke(Method.java:507)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at dalvik.system.NativeStart.main(Native Method)
02-15 15:33:35.769: E/AndroidRuntime(20339): Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:237)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.database.sqlite.SQLiteQuery.bindString(SQLiteQuery.java:185)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:48)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:280)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at com.agmsi.medical.MedicalListActivity.fillMedicalList(MedicalListActivity.java:85)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at com.agmsi.medical.MedicalListActivity.onCreate(MedicalListActivity.java:42)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at com.agmsi.medical.EditMedicalActivity.onCreate(EditMedicalActivity.java:41)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-15 15:33:35.769: E/AndroidRuntime(20339):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
02-15 15:33:35.769: E/AndroidRuntime(20339):    ... 11 more

既然错误发生在这一节之后,我想这就是问题所在

代码语言:javascript
复制
 Intent editMedical = new Intent(MedicalListActivity.this,
       EditMedicalActivity.class);

 editMedical.putExtra("patientName", strMedicalName);
 editMedical.putExtra("patientGroup", strMedicalType);
 editMedical.putExtra("treatmentDate", strMedicalTreatmentDate);
 editMedical.putExtra("medicalTreatment", strMedicalTreatment);
 String strCurrentPatient = String.valueOf(MedicalId);
 editMedical.putExtra("medicalId", strCurrentPatient);
 MedicalListActivity.this.startActivity(editMedical);

在此之后,错误就会显示-所以我不确定是这里还是其他地方的错误,这就是为什么我从涉及的两个区域发布代码的原因

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-16 06:53:27

这是一个sqlite (数据库错误)。在查看您的代码并将其与我的代码进行比较之后,您传递给fillMedicalList(String editPatientToGet);editPatientToGet似乎是空的

您的logcat可以在以下行进行确认:

代码语言:javascript
复制
02-15 15:33:35.769: E/AndroidRuntime(20339):    at com.agmsi.medical.MedicalListActivity.fillMedicalList(MedicalListActivity.java:85)
票数 1
EN

Stack Overflow用户

发布于 2013-02-16 06:42:53

堆栈跟踪使它看起来像是以下行是问题所在:

代码语言:javascript
复制
Cursor c = mDB.query(Medical.MEDICAL_TABLE_NAME, EditColumnsToReturn,
        Medical._ID + "=?", astrArgs, null, null, null, null);

你在扩展代码库吗?你确实使用了不同的风格。也许另一种风格适合你:

代码语言:javascript
复制
Cursor c = queryBuilder.query(mDB, EditColumnsToReturn, Medical._ID + "=?", astrArgs,
        null, null, null);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14903928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档