2014-01-29 13 views
0

我想從我的數據庫中讀取一個文本列,然後進行更新。 我創建瞭如下兩種方法:在SQLite中讀寫單列Android

public boolean editNote(Lesson lesson) { 

    ContentValues values = new ContentValues(); 
    values.put(LessonsDBOpenHelper.COLUMN_NOTE, lesson.getNote()); 
    String where = LessonsDBOpenHelper.COLUMN_ID + "=" + lesson.getId(); 
    int result = database.update(LessonsDBOpenHelper.TABLE_LESSONS, values, where, null); 
    return (result == 1); 

} 

public String readNote(Lesson lesson) { 

     String query = "SELECT * FROM lessons " + 
       "WHERE lessonId =" +lesson.getId(); 
     Cursor cursor = database.rawQuery(query, null); 

     String returnString = ""; // default value if nothing is found 

     if (cursor.moveToFirst()){ 
      returnString = cursor.getString(cursor.getColumnIndex(LessonsDBOpenHelper.COLUMN_NOTE)); 
     } 
     cursor.close(); 
     return returnString; 
     } 

,然後我從另一個調用活動editNote()和讀取注()方法是這樣的:

public class Note extends Activity { 

    private static final String LOGTAG = "MYAPP"; 
    Lesson lesson; 
    LessonsDataSource datasource; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.edit_note); 

     Bundle b = getIntent().getExtras(); 
     lesson = b.getParcelable(".model.Lesson"); 

     Button noteSave = (Button) findViewById(R.id.note_save); 
     Button noteClear = (Button) findViewById(R.id.note_clear); 
     final TextView noteText = (TextView) findViewById(R.id.noteText); 

     String dbNote = datasource.readNote(lesson); 
     noteText.setText(dbNote); 
     Log.i(LOGTAG, "Note loaded from DB is "+dbNote); 


     noteClear.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       noteText.setText(""); 
       lesson.setNote(""); 
       datasource.editNote(lesson); 
      } 
     }); 

     noteSave.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       String note = noteText.getText().toString(); 
       lesson.setNote(note); 
       datasource.editNote(lesson); 
       Log.i(LOGTAG, "Note text changed to "+note); 

       String dbNote = datasource.readNote(lesson); 
       Log.i(LOGTAG, "Note text in DB is "+dbNote); 


      } 
     }); 
    } 
} 

但我的應用程序當它讀取注或editNote方法時崩潰。 我在做什麼錯?

我只想閱讀並更新我的數據庫中提交的文本。

編輯: 這裏是logcat的:

01-30 02:47:29.809: D/AndroidRuntime(30850): Shutting down VM 
01-30 02:47:29.809: W/dalvikvm(30850): threadid=1: thread exiting with uncaught exception (group=0x41744ba8) 
01-30 02:47:29.809: E/AndroidRuntime(30850): FATAL EXCEPTION: main 
01-30 02:47:29.809: E/AndroidRuntime(30850): Process: com.me.linux, PID: 30850 
01-30 02:47:29.809: E/AndroidRuntime(30850): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.me.linux/com.me.linux.Note}: java.lang.NullPointerException 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.os.Handler.dispatchMessage(Handler.java:102) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.os.Looper.loop(Looper.java:136) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.app.ActivityThread.main(ActivityThread.java:5017) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at java.lang.reflect.Method.invokeNative(Native Method) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at java.lang.reflect.Method.invoke(Method.java:515) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at dalvik.system.NativeStart.main(Native Method) 
01-30 02:47:29.809: E/AndroidRuntime(30850): Caused by: java.lang.NullPointerException 
01-30 02:47:29.809: E/AndroidRuntime(30850): at com.me.linux.Note.onCreate(Note.java:31) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.app.Activity.performCreate(Activity.java:5231) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
01-30 02:47:29.809: E/AndroidRuntime(30850): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
01-30 02:47:29.809: E/AndroidRuntime(30850): ... 11 more 
01-30 02:59:51.589: I/MYAPP(31030): Database closed 

編輯2: 這裏是意圖putExtra的代碼,啓動此活動:

case R.id.action_edit_note: 
      Intent intent = new Intent(this, Note.class); 

      intent.putExtra(".model.Lesson", lesson); 
      startActivityForResult(intent, 1002); 
      break; 
+0

崩潰? logcat在哪裏? – mt0s

+0

我從問題開始的地方添加了LogCat。 –

回答

1

你有重新打開readNote()方法中的數據庫,以便您可以創建查詢。

+0

我如何修復它? –

+0

@KianTamar在將值分配給TextView之前,檢查它是否爲* not * null。如果不是那麼你可以'noteText.setText(dbNote);'否則發出一個錯誤或任何你想要在這種情況下做。 – mt0s

+0

我試過你的代碼,我的應用又崩潰了。我還手動更改了數據庫中的值,使其不會爲NULL。我的應用程序再次崩潰 –