Android: не удалось установить setLocale () при построении, закрытии базы данных - PullRequest
6 голосов
/ 04 октября 2011

Я пытаюсь создать базу данных с 12 различными таблицами, которая до сегодняшнего дня работала нормально. Теперь каждый раз, когда я запускаю свое приложение в первый раз после его удаления и переустановки (или просто очистки данных приложения), я получаю сообщение об ошибке в заголовке. Тем не менее, во второй раз, когда я запускаю приложение после получения этой ошибки, оно работает нормально. Код ниже взят из моего класса DatabaseHelper, который более или менее совпадает с учебником по Android Notepad.

Эта ошибка возникает после того, как в моей деятельности была открыта база данных, и я пытаюсь сделать свой первый запрос.

Любые предложения о том, что может вызвать это и как ее решить?

private static class DatabaseHelper extends SQLiteOpenHelper {

    private static String DB_PATH = "/data/data/my_app/databases/";

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        if (!checkDataBase()) {
            db.execSQL(TABLE_1);
            db.execSQL(TABLE_2);
            db.execSQL(TABLE_3);

            db.execSQL(TABLE_4);
            db.execSQL(TABLE_5);
            db.execSQL(TABLE_6);

            db.execSQL(TABLE_7);
            db.execSQL(TABLE_8);
            db.execSQL(TABLE_9);

            db.execSQL(TABLE_10);
            db.execSQL(TABLE_11);
            db.execSQL(TABLE_12);
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_1);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_2);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_3);

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_4);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_5);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_6);

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_7);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_8);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_9);

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_10);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_11);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_12);
        onCreate(db);
    }

    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        try {
            checkDB = SQLiteDatabase.openDatabase(DB_PATH + DATABASE_NAME, null, SQLiteDatabase.OPEN_READONLY);
            checkDB.close();
        } catch (SQLiteException e) {

        }
        return checkDB != null ? true : false;
    }
}

1 Ответ

6 голосов
/ 27 марта 2012

Проблема в том, что ваша база данных, вероятно, не содержит метаданных, связанных с Android.

При вызове SQLiteDatabase.openDatabase() необходимо использовать флаг SQLiteDatabase.NO_LOCALIZED_COLLATORS - это больше не вызывает проблему.По крайней мере, у меня это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...