Проблемы Sqlite с устройством OnePlus

У нас есть приложение для Android, которое использует SQLite для некоторой формы постоянного хранилища. Код sqlite работает на всех устройствах, кроме устройств Oneplus. (Я тестирую на Oneplus 2 A2003)

Ниже приведена ошибка, которую я вижу в logcat.

android.database.sqlite.SQLiteException: нет такой таблицы: testtable (код 1): при компиляции: INSERT INTO testtable(ID,CompletedOn,CreatedOn,Type,Pending,Priority,Attributes) VALUES (?,?,?,?, ?,?,?)

Ниже приведен фрагмент базы данных, который используется для открытой базы данных.

   SQLiteDatabase db = SQLiteDatabase.openDatabase(this.getHelperContext().getDatabasePath(DATABASE_NAME).getAbsolutePath(), null,
                    SQLiteDatabase.NO_LOCALIZED_COLLATORS);

Пробовали даже указывать права доступа при открытии, но без разницы. например SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READWRITE

Любая помощь будет оценена по достоинству.


person user_v    schedule 04.01.2016    source источник
comment
Вы правильно создаете базу данных? Опубликуйте свои onCreate и onUpdate.   -  person 323go    schedule 04.01.2016
comment
Удалите и переустановите приложение, чтобы убедиться, что вы работаете с правильной схемой базы данных и не нарушаете работу из-за несоответствия между номером версии вашей схемы и вашей onUpgrade() реализацией. Или изучите схему существующей базы данных, чтобы увидеть, чем она отличается от желаемой схемы.   -  person CommonsWare    schedule 04.01.2016
comment
Схема базы данных (с таблицами и образцами данных) является частью приложения, код только пытается читать/обновлять/вставлять. И это единственная проблема с устройством Oneplus 2, отлично работает с остальными (приложение старше 2 лет)   -  person user_v    schedule 04.01.2016
comment
Вы нашли решение своей проблемы?   -  person chossen-addict    schedule 04.02.2016
comment
Нет, мы не нашли никакого решения, в итоге пришлось отказаться от него из-за ROI.   -  person user_v    schedule 29.02.2016


Ответы (1)


Проверьте этот ответ https://stackoverflow.com/a/33032467/4504324, он решил проблему для меня.

Просто закройте базу данных перед копированием потока sqlite во внутреннюю базу данных.

private void copyDataBase() throws IOException {

    try {
        //Open your local db as the input stream
        InputStream myInput = mContext.getAssets().open("databases/" + DB_NAME+".sqlite");
        // Path to the just created empty db
        String outFileName = mContext.getDatabasePath(DB_NAME).getAbsolutePath();

        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        //close the database so that stream can be copied
        this.getReadableDatabase().close();

        //transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }
        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
person Uday Naidu    schedule 05.04.2016