NotePad 예제를 수정해가면서 Database 공부를 하던중입니다..
기존의 Notepad에 SubTitle라는 사용자 입력 스트링을 받을수 있는
EditText 하나를 더 추가해.. data에 넣는 작업을 하던중.. 널포인트익셉션 오류가 떠버렷습니다..ㅠㅠ
소스 코드에.. 어디가 잘못된것일까요..

우선은 NoteEdit.java 파일..
import android.app.*;
import android.database.*;
import android.os.*;
import android.util.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;

public class NoteEdit extends Activity {
 private final String tag  ="NoteEdit";
 private EditText mTitle, mSubTitle, mContent;
 private Long mRowId;
 private NotesDbAdapter mDbHelper;
 private Button mInsert, mCancel;
 private OnClickListener mClick;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.edit);

  mTitle = (EditText) findViewById(R.id.Edit_TitleText);
  mSubTitle = (EditText) findViewById(R.id.Edit_SubTitleText);
  mContent = (EditText) findViewById(R.id.Edit_ContentText);
  
  mInsert = (Button) findViewById(R.id.Edit_InsetButton);
  mCancel = (Button) findViewById(R.id.Edit_CancelButton);
  Log.d(tag, "mRowId if befor");
  mRowId = (savedInstanceState == null) ? null : (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
  if(mRowId == null){
   Bundle extras = getIntent().getExtras();
   mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID) : null;
  }
  
  populateFields();
  
  mClick = new OnClickListener(){
   @Override
   public void onClick(View v) {
   switch(v.getId())
   {
   case R.id.Edit_InsetButton :
    setResult(RESULT_OK);
    finish();
    break;
   case R.id.Edit_CancelButton :
    finish();
    break;
   }
    
   }};
   
   mInsert.setOnClickListener(mClick);
   mCancel.setOnClickListener(mClick);
  
 }
 
 private void populateFields(){
  Log.d(tag, "populateFields");
  if(mRowId != null){
   Cursor note = mDbHelper.fetchNote(mRowId);
   startManagingCursor(note);
   
   mTitle.setText(note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
   mSubTitle.setText(note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_SUBTITLE)));
   mContent.setText(note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_CONTENT)));
  }
 }
 @Override
 protected void onSaveInstanceState(Bundle outState) {
  Log.d(tag, "onSaveInstanceState");
  saveState();
  super.onSaveInstanceState(outState);
  
  
 }
 @Override
 protected void onPause() {
  Log.d(tag, "onPause");
  saveState();
  super.onPause();
  
 }
 @Override
 protected void onResume() {
  Log.d(tag, "onResume");
  populateFields();
  super.onResume();
  
 }
 
 private void saveState(){
  Log.d(tag, "saveState");
  String title = mTitle.getText().toString();
  String subtitle = mSubTitle.getText().toString();
  String content = mContent.getText().toString();
  
  if(mRowId == null)
  {
   long id = mDbHelper.createNote(title, subtitle, content);
   if(id > 0){
    mRowId = id;
   }
  }else{
   mDbHelper.updateNote(mRowId, title, subtitle, content);
  }
  
 }
 
}



NotePadDbAdapter.java
package kwh.cu.NotePad;

import android.content.*;
import android.database.*;
import android.database.sqlite.*;
public class NotesDbAdapter{
 
 public static final String KEY_TITLE = "title";
 public static final String KEY_SUBTITLE = "subtitle";
 public static final String KEY_CONTENT = "content";
 public static final String KEY_ROWID = "_id";
 
 public static final String TAG = "NotesDbAdapter";
 private DatabaseHelper mDbHelper;
 private SQLiteDatabase mDb;
 
 private static final String DATABASE_CREATE =
   "create table notes (_id integer primary key autoincrement, "
  + "title text not null, subtitle text not null, content text not null);";
 
 private static final String DATABASE_NAME = "data";
 private static final String DATABASE_TABLE = "notes";
 private static final int DATABASE_VERSION = 1;
 
 private final Context mCtx;
 
 private static class DatabaseHelper extends SQLiteOpenHelper{
  public DatabaseHelper(Context contex) {
   super(contex, DATABASE_NAME, null, DATABASE_VERSION);
   // TODO Auto-generated constructor stub
  }
  @Override
  public void onCreate(SQLiteDatabase db) {
   db.execSQL(DATABASE_CREATE);
   
  }
  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   db.execSQL("DROP TABLE IF EXISTS ontes");
   onCreate(db);
   
  }
  
 }
 
 public NotesDbAdapter(Context ctx)
 {
  this.mCtx = ctx;
 }
 
 public NotesDbAdapter open() throws SQLException{
  
  mDbHelper = new DatabaseHelper(mCtx);
  mDb = mDbHelper.getWritableDatabase();
  return this;
  
 }
 
 public void close(){
  mDbHelper.close();
 }
 
 public long createNote(String title, String subtitle, String content){
  ContentValues initialValues = new ContentValues();
  initialValues.put(KEY_TITLE, title);
  initialValues.put(KEY_SUBTITLE, subtitle);
  initialValues.put(KEY_CONTENT, content);
  
  
  return mDb.insert(DATABASE_TABLE, null, initialValues);
  
 }
 
 public boolean deleteNote(long rowId){
  return mDb.delete(DATABASE_TABLE, KEY_ROWID + "="+rowId , null) > 0;
  
 }
 public Cursor fetchAllnotes(){
  return mDb.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_TITLE,
    KEY_SUBTITLE, KEY_CONTENT}, null, null, null, null, null);
  }
  
 public Cursor fetchNote(long rowId) throws SQLException{
  Cursor mCursor =
   mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
     KEY_SUBTITLE, KEY_CONTENT}, KEY_ROWID + "=" + rowId, null, null, null,null,null);
  if(mCursor !=null){
   mCursor.moveToFirst();
  }
  return null; 
 }
  public boolean updateNote(long rowId, String title, String subtitle, String content) {
         ContentValues args = new ContentValues();
         args.put(KEY_TITLE, title);
         args.put(KEY_SUBTITLE, subtitle);
         args.put(KEY_CONTENT, content);
         return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
     }
 
}


그리고 LogCat입니다..
02-11 07:33:49.243: DEBUG/NoteEdit(302): saveState
02-11 07:33:49.273: DEBUG/AndroidRuntime(302): Shutting down VM
02-11 07:33:49.283: WARN/dalvikvm(302): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
02-11 07:33:49.343: ERROR/AndroidRuntime(302): FATAL EXCEPTION: main
02-11 07:33:49.343: ERROR/AndroidRuntime(302): java.lang.RuntimeException: Unable to pause activity {kwh.cu.NotePad/kwh.cu.NotePad.NoteEdit}: java.lang.NullPointerException
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3348)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3305)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3288)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.ActivityThread.access$2500(ActivityThread.java:125)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.os.Looper.loop(Looper.java:123)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at java.lang.reflect.Method.invokeNative(Native Method)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at java.lang.reflect.Method.invoke(Method.java:521)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at dalvik.system.NativeStart.main(Native Method)
02-11 07:33:49.343: ERROR/AndroidRuntime(302): Caused by: java.lang.NullPointerException
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at kwh.cu.NotePad.NoteEdit.saveState(NoteEdit.java:106)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at kwh.cu.NotePad.NoteEdit.onPause(NoteEdit.java:85)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.Activity.performPause(Activity.java:3842)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1190)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3335)
02-11 07:33:49.343: ERROR/AndroidRuntime(302):     ... 12 more