2013-02-15 39 views
1

在我的应用程序中,我有一个列表,显示每个病人的医疗记录,列表显示了他们的名字,治疗日期。我希望能够点击一个特定的条目,并让它进入编辑屏幕。绑定值在索引1为空

该应用程序正确地增加了新的条目,它正确地列出条目,但是当我从列表中选择一个条目我得到的无法启动的活动和消息是绑定值索引1处为null

我的代码如下所示

要建立我从

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); 

选择列表现在我已经开始留意项目的列表

上点击

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

现在我editMedical(editMedicalid)代码如下

//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的

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 

好,因为这部分之后,我想这是部分

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); 

右后这个错误显示发生错误 - 所以我不知道这是否是这里或其他地方的东西,这就是为什么我发布了涉及两个区域的代码

+0

你可以请发布logcat输出吗? – 2013-02-15 21:54:04

+1

请突出显示代码中反映错误的重要行。有太多的代码需要查看,我们不会计算行数... – JoxTraex 2013-02-15 22:04:20

+0

@Hank。看看我的帖子 – 2013-02-15 22:56:29

回答

1

这是一个SQLite(数据库错误)。 翻翻你的代码,它与我自己比较之后似乎editPatientToGet你所传递给fillMedicalList(String editPatientToGet);为空

您的logcat可以确认它在这条线:

02-15 15:33:35.769: E/AndroidRuntime(20339): at com.agmsi.medical.MedicalListActivity.fillMedicalList(MedicalListActivity.java:85) 
1

堆栈跟踪使其看起来像下面一行是问题:

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

您是否在扩展代码库?你确实使用不同的风格。 也许其他风格的作品为您提供:

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

我遇到了同样的问题,因为我通过null arg到Dao.queryForId(arg)