2012-04-09 20 views
0

この質問は有名ですが、誰もが常にこのNotepad Tutorialを見に行くと言います。リストビューでデータベースを表示する方法

これは助けてくれますが、あなたが立ち往生したときにそれほど助けになりません。

私はAndroidで作成したこのデータベースを持っていて、それをリストビューに表示したいのですが、私はチュートリアルを行いましたが、なぜ私はそれが私のプロジェクトでうまくいかないのか分かりません助けることができる人がいるなら、あなた自身を見せてください!

public class DBAdapter { 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_TYPE = "type"; 
    public static final String KEY_WEIGHT = "weight"; 
    public static final String KEY_EXP = "expiration day"; 

    private static final String TAG = "DBAdapter"; 

    private static final String DATABASE_NAME = "MyDB"; 
    private static final String DATABASE_TABLE = "Fridge"; 
    private static final int DATABASE_VERSION = 2; 

    private static final String DATABASE_CREATE = 
     "create table Fridge (_id integer primary key autoincrement, " 
     + "type text not null, weight integer not null, exp integer not null);"; 
    //CHECK (P_Id>0) 

    private final Context context;  

    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    public DBAdapter(Context ctx) 
    { 
     this.context = ctx; 
     //It lets newly created objects understand what has been going on. 
     //Typically you call it to get information regarding another part of your program 
     DBHelper = new DatabaseHelper(context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION);//calls the context in the parent class 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      try { 
       db.execSQL(DATABASE_CREATE);  
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // this method is used if the OS or the version App is changed 
     { 
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS cars"); 
      onCreate(db); 
     } 
    }  

    //---opens the database--- 
    public DBAdapter open() throws SQLException 
    { 
     db = DBHelper.getWritableDatabase(); 
     return this; 
    } 

    //---closes the database---  
    public void close() 
    { 
     DBHelper.close(); 
    } 

    //---insert a contact into the database--- 
    public long insertCar(String type, int weight, int exp) 
    { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_TYPE, type); 
     initialValues.put(KEY_WEIGHT, weight); 
     initialValues.put(KEY_EXP, exp); 

     return db.insert(DATABASE_TABLE, null, initialValues); 
    } 

    //---deletes a particular contact--- 
    public boolean deleteCar(long rowId) 
    { 
     return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
    } 

    //---retrieves all the contacts--- 
    public Cursor getAllCars() 
    { 
     return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TYPE, 
       KEY_WEIGHT, KEY_EXP}, null, null, null, null, null); 
    } 

    /* 
    * retrieves a particular car 
    * 
    */ 
    public Cursor getCar(String searchString) //throws SQLException 
    { 
     Cursor mCursor = 
       db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, 
       KEY_TYPE, KEY_WEIGHT,KEY_EXP},KEY_TYPE +"="+"'"+searchString+"'" +" OR "+ KEY_ROWID + "=" + "'"+searchString +"'"+" OR "+ KEY_EXP + "=" + "'"+searchString +"'"+" OR " + KEY_WEIGHT + "=" + "'" + searchString +"'", null, 
       null, null, null, null); 

     return mCursor; 
    } 


    //---updates a contact--- 
    public boolean updateCar(long rowId, String type, int weight, int exp) 
    { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_TYPE, type); 
     args.put(KEY_WEIGHT, weight); 
     args.put(KEY_EXP, exp); 

     return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 
    } 
} 

Logcat情報:


はここ

public class MyFridge extends ListActivity { 

private DBAdapter db; 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.notepad_list); 
    db = new DBAdapter(this); 
    db.open(); 
    fillData(); 


}@Override 
public boolean onCreateOptionsMenu (Menu menu) 
{ 


    super.onCreateOptionsMenu(menu); 
    CreateMenu(menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected (MenuItem item) 
{ 

    switch(item.getItemId()) 
    { 
    case 0: 

     Intent f = new Intent(MyFridge.this, Addform.class); 
     startActivity(f); 

      return true; 

    case 1: 

     Intent r = new Intent(MyFridge.this, MyRecipes.class); 
     startActivity(r); 


     return true; 

    default: 
     return super.onOptionsItemSelected(item); 

     } 
    } 

private void CreateMenu(Menu menu) 
{ 
    MenuItem mnu1 = menu.add(0, 0, 0, "Add ingredient"); 
    { 
     mnu1.setAlphabeticShortcut('a');//Change the alphabetic shortcut associated with this item. 
     mnu1.setIcon(R.drawable.ic_launcher); 

    } 

    MenuItem mnu2 = menu.add(0, 1, 1, "Delete ingredient"); 
    { 
     mnu2.setAlphabeticShortcut('b');//Change the alphabetic shortcut associated with this item. 
     mnu2.setIcon(R.drawable.ic_launcher); 
    } 
    } 

    private void fillData() { 
     // Get all of the notes from the database and create the item list 
     Cursor c = db.getAllCars(); 
     startManagingCursor(c); 

     String[] from = new String[] { DBAdapter.KEY_TYPE }; 
     int[] to = new int[] { R.id.text1 }; 

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

そして、ここでは私のデータベースである私のコードです。

04-09 18:14:47.128: D/TextLayoutCache(23297): Using debug level: 0 - Debug Enabled: 0 
04-09 18:14:47.173: D/CLIPBOARD(23297): Hide Clipboard dialog at Starting input: finished by someone else... ! 
04-09 18:14:49.113: I/SqliteDatabaseCpp(23297): sqlite returned: error code = 1, msg = no such table: Fridge, db=xxx 
04-09 18:14:49.113: D/AndroidRuntime(23297): Shutting down VM 
04-09 18:14:49.118: W/dalvikvm(23297): threadid=1: thread exiting with uncaught exception (group=0x40c281f8) 
04-09 18:14:49.123: E/AndroidRuntime(23297): FATAL EXCEPTION: main 
04-09 18:14:49.123: E/AndroidRuntime(23297): java.lang.RuntimeException: Unable to start activity ComponentInfo{wijayaratnam.sutharsun.mobilefridge/wijayaratnam.sutharsun.mobilefridge.MyFridge}: android.database.sqlite.SQLiteException: no such table: Fridge: , while compiling: SELECT _id, type, weight, expiration day FROM Fridge 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.app.ActivityThread.access$600(ActivityThread.java:127) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.os.Looper.loop(Looper.java:137) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.app.ActivityThread.main(ActivityThread.java:4507) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at java.lang.reflect.Method.invokeNative(Native Method) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at java.lang.reflect.Method.invoke(Method.java:511) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at dalvik.system.NativeStart.main(Native Method) 
04-09 18:14:49.123: E/AndroidRuntime(23297): Caused by: android.database.sqlite.SQLiteException: no such table: Fridge: , while compiling: SELECT _id, type, weight, expiration day FROM Fridge 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1690) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1575) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1531) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1611) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at wijayaratnam.sutharsun.mobilefridge.DBAdapter.getAllCars(DBAdapter.java:101) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at wijayaratnam.sutharsun.mobilefridge.MyFridge.fillData(MyFridge.java:146) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at wijayaratnam.sutharsun.mobilefridge.MyFridge.onCreate(MyFridge.java:29) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.app.Activity.performCreate(Activity.java:4465) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 
04-09 18:14:49.123: E/AndroidRuntime(23297): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932) 
04-09 18:14:49.123: E/AndroidRuntime(23297): ... 11 more 
+0

エラーは何ですか? – Sam

+0

これは瞬間的にクラッシュするため、まったく無意味です。 – user1322287

+0

W/dalvikvm(22667):threadid = 1:未知の例外(グループ= 0x40c281f8)でスレッドが終了しました – user1322287

答えて

0

あなたのエラーはSQL「列が見つからない」、これに再度書き込みあなたのcreate tableの文の場合:

private static final String DATABASE_CREATE = 
    "create table " + DATABASE_TABLE + " (" 
    + KEY_ROWID + " integer primary key autoincrement, " 
    + KEY_TYPE + " text not null, " 
    + KEY_WEIGHT + " integer not null, " 
    + KEY_EXP + " integer not null);"; 

あなたはKEY_EXP = "expiration day"を定義することがわかりますが、あなたのcreate文では、手動で列expを呼び出します。すなわち列が見つからない。これらの変数を可能な限り使用して、これらのタイプの誤植を制限してください。がんばろう!

+0

また、 'expiration_day'という単語が1つしかないカラムを使用する方が簡単です。 – Sam

+0

humm私はまだ同じエラーがあります – user1322287

+0

あなたは古いテーブルを落としましたか? – Sam

関連する問題