2013-02-15 50 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)