2012-01-25 8 views
1

このコードがクラッシュするのはなぜですか?カーソルでSQLiteデータベースを読むことができません。常にクラッシュする

CustomDatabaseHelper.java:

public class CustomDatabaseHelper { 

SQLiteDatabase db; 
private static final String DATABASE_TABLE = "tbl_homework"; 
public static final String KEY_TITLE = "hw"; 
public static final String KEY_ROWID = "id"; 
private final Context mCtx; 

public Cursor executeSQLQuery(String query){ 
    Cursor c = db.rawQuery(query,null); 
    return c; 
} 

public Cursor fetchAllNotes() { 

    return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE}, null, null, null, null, null); 
} 

public CustomDatabaseHelper(Context ctx) { 
    this.mCtx = ctx; 
}  
} 

homework.java:

public class homework extends ListActivity { 
SQLiteDatabase db; 
private CustomDatabaseHelper mDbHelper; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.homework); 

    //Create Database 
    db = openOrCreateDatabase("test_database.db", 
      SQLiteDatabase.CREATE_IF_NECESSARY, null); 

    db.setVersion(1); 
    db.setLocale(Locale.getDefault()); 
    db.setLockingEnabled(true); 

    //Create table tbl_homework 
    final String CREATE_TABLE_HW = 
      "CREATE TABLE IF NOT EXISTS tbl_homework (" 
      + "id INTEGER PRIMARY KEY AUTOINCREMENT," 
      + "hw TEXT);"; 

      db.execSQL(CREATE_TABLE_HW); 

    press_cmd_back(); 
    press_cmd_test_data(); 

    mDbHelper = new CustomDatabaseHelper(this); 

    fillData(); 
} 

//What will happen if cmd_back gets pressed 
private void press_cmd_back(){ 
    Button cmd_back = (Button)findViewById(R.id.cmd_back); 
    cmd_back.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent Intent_main = new Intent(homework.this, Noten_HausaufgabenActivity.class); 
      startActivity(Intent_main); 
     } 
    }); 
} 

//What will happen if cmd_test_data gets pressed 
private void press_cmd_test_data(){ 
    Button cmd_test_data = (Button)findViewById(R.id.cmd_eintragen); 
    cmd_test_data.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      open_database_rw(); 
      EditText txt_hw = (EditText)findViewById(R.id.edt_eingabe); 
      String txt_insert_hw = txt_hw.getText().toString(); 

      final String INSERT_HW = "INSERT INTO tbl_homework ('hw') VALUES ('" + txt_insert_hw + "')"; 

      db.execSQL(INSERT_HW); 

     } 
    }); 

} 

//Open Database RW 
private void open_database_rw() { 
    db = SQLiteDatabase.openDatabase("/data/data/test.marco.notenha/databases/test_database.db", 
      null, SQLiteDatabase.OPEN_READWRITE); 
} 

private void fillData() { 
    // Get all of the notes from the database and create the item list 

    Cursor c = mDbHelper.fetchAllNotes(); 

    /*startManagingCursor(c); 

    String[] from = new String[] { CustomDatabaseHelper.KEY_TITLE }; 
    int[] to = new int[] {R.id.txt_notes_row}; 

    // Now create an array adapter and set it to display using our row 
    SimpleCursorAdapter notes = 
     new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to); 
     setListAdapter(notes);*/ 
} 

} 

Error log: 

01-25 17:20:30.152: D/dalvikvm(7421): GC_EXTERNAL_ALLOC freed 48K, 50% free 2690K/5379K, external 0K/0K, paused 70ms 
01-25 17:20:30.835: D/dalvikvm(7421): GC_EXTERNAL_ALLOC freed 32K, 49% free 2757K/5379K, external 203K/523K, paused 19ms 
01-25 17:20:30.871: D/AndroidRuntime(7421): Shutting down VM 
01-25 17:20:30.871: W/dalvikvm(7421): threadid=1: thread exiting with uncaught exception (group=0x4006f568) 
01-25 17:20:30.871: E/AndroidRuntime(7421): FATAL EXCEPTION: main 
01-25 17:20:30.871: E/AndroidRuntime(7421): java.lang.RuntimeException: Unable to start activity ComponentInfo{test.marco.notenha/test.marco.notenha.homework}: java.lang.NullPointerException 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1664) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1680) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.os.Looper.loop(Looper.java:130) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.app.ActivityThread.main(ActivityThread.java:3703) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at java.lang.reflect.Method.invoke(Method.java:507) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at dalvik.system.NativeStart.main(Native Method) 
01-25 17:20:30.871: E/AndroidRuntime(7421): Caused by: java.lang.NullPointerException 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at test.marco.notenha.CustomDatabaseHelper.fetchAllNotes(CustomDatabaseHelper.java:22) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at test.marco.notenha.homework.fillData(homework.java:89) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at test.marco.notenha.homework.onCreate(homework.java:46) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-25 17:20:30.871: E/AndroidRuntime(7421):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1628) 
+0

エラーログにフォーマットを適用してください – diggingforfire

+0

CustomDatabaseHelperの行番号22はどれですか。問題はそこにあります。おそらく、デバッグし、あなたは問題を把握するでしょう。 –

+0

宿題タグが追加されました –

答えて

1

アプリためfetchAllNotesにヌルポインタクラッシュします。これは、dbCustomDatabaseHelperの中に初期化していないために発生しています。あなたは、この行を追加してみてくださいすることができます

mDbHelper.db = db; 

だけonCreate()fillData()への呼び出しの前に。それはnullポインタ例外を解決するはずです。しかし、データベースがすでに存在する場合、コードには別の問題があると思います。このすべてを行うには、SQLiteOpenHelperクラスをご覧ください。

+0

ありがとう@Ted Hopp ...それで解決しました;) –