2

私は現在の問題に直面しています:

MainActivityと呼ばれる最初のアクティビティと2番目のアクティビティを持つアプリケーションがありますSecondActivity。さて、これらの両方で、別のテーブルが必要です。

これは私の HelperClass です:

public class FMSDatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;

    private static final String FMS_TABLE_CREATE = "CREATE TABLE fms (fmsId integer primary key autoincrement, status TEXT, date TEXT, kennung TEXT);";
    private static final String ZVEI_TABLE_CREATE = "CREATE TABLE zvei (zveiId integer primary key autoincrement, schleife TEXT, date TEXT, description TEXT);";

    public static final String TABLE_FMS = "fms";
    public static final String TABLE_ZVEI = "zvei";

    public static final String COLUMN_FMS_ID = "fmsId";
    public static final String COLUMN_FMS_KENNUNG = "kennung";
    public static final String COLUMN_FMS_STATUS = "status";
    public static final String COLUMN_FMS_DATE = "date";

    public static final String COLUMN_ZVEI_ID = "zveiId";
    public static final String COLUMN_ZVEI_SCHLEIFE = "schleife";
    public static final String COLUMN_ZVEI_DATE = "date";
    public static final String COLUMN_ZVEI_DESCRIPTION = "description";

    // ----------------------------------------------------------------------
    public FMSDatabaseHandler(Context context) {
        super(context, "fms.db", null, DATABASE_VERSION);
    }

    // ----------------------------------------------------------------------
    @Override public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(FMS_TABLE_CREATE + ZVEI_TABLE_CREATE);
            //db.execSQL(FMS_TABLE_CREATE);
            //db.execSQL(ZVEI_TABLE_CREATE);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    // ----------------------------------------------------------------------
    @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_FMS);
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_ZVEI);

      onCreate(db);
    }

    // ----------------------------------------------------------------------
    public List<ZVEI> getAllZvei() {

        List<ZVEI> zveiList = new ArrayList<ZVEI>();
        String selectQuery = "SELECT * FROM " + TABLE_ZVEI + " ORDER BY zveiId DESC";

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                ZVEI zvei = new ZVEI();
                zvei.setZveiId(Integer.parseInt(cursor.getString(0)));
                zvei.setSchleife(cursor.getString(1));
                zvei.setDate(cursor.getString(2));
                zvei.setDescription(cursor.getString(3));
                zveiList.add(zvei);
            } while (cursor.moveToNext());
        }

        return zveiList;

    }

}

MainActivity開始すると、getAllZvei()メソッドが呼び出されるので、私の意見では、HelperClass からのonCreate()メソッド ( を介して) も呼び出す必要があります。db.getWritableDatabase()不思議: テーブルzveiは作成されますが、fms. したがって、2 番目のアクティビティ ( とgetAllFms()同様の別のメソッドを呼び出す を開始するgetAllZvei()と、このソースでは削除されました) がクラッシュし、LogCat が次のように通知します。

noch such table: fms

これをNexus 4エミュレーターで実行します。ユーザーデータをワイプし、アプリからデータを消去して、アプリをアンインストールしました。DDMS 経由でプルしfms.db、SQLiteBrowser で表示しましたが、zvei しか存在しません。

理由は説明できません。あなたはできる?

更新 データベース名の名前を変更したところ、DDMS で認識されましたが、まだ古い名前が生成されています。そのため、プロジェクトをクリーンアップして再構築し、エミュレーターを削除して新しいエミュレーターを作成し、ユーザー データを消去しました (作成したばかりでも!)、今では動作します!

皆さんのお陰で!

4

1 に答える 1