Невозможно запустить трекер аннулирования. БД закрыта? Android-комната ORMAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно запустить трекер аннулирования. БД закрыта? Android-комната ORM

Сообщение Anonymous »

Я использую базу данных Room. Я запускаю базу данных в onCreate и закрываю ее в onDestroy. Однако, когда я вхожу в действие во второй раз, я сталкиваюсь со следующей ошибкой.
Как видно из журнала, после запуска Room я сверяюсь с журналом и получаю ложный ответ «isOpen», а еще в базе данных есть обратный вызов. Здесь, когда он открыт, написано открыто. Я не понимаю, связано ли это с задержкой или с запуском метода isOpen(). но после всего этого выдает ошибку в заголовке

Код: Выделить всё

 DATABASECHECK isOpen: false // my log
Invalidation tracker is initialized twice :/.
DATABASECHECK Database open // my log
(1) no such table: room_table_modification_log in "SELECT * FROM room_table_modification_log WHERE invalidated = 1;"
Cannot run invalidation tracker.  Is the db closed?
android.database.sqlite.SQLiteException: no such table: room_table_modification_log (code 1 SQLITE_ERROR[1]): , while compiling: SELECT * FROM room_table_modification_log WHERE invalidated = 1;
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1463)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:901)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:62)
at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:2063)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:2038)
at androidx.sqlite.db.framework.FrameworkSQLiteDatabase.query(FrameworkSQLiteDatabase.kt:156)
at androidx.room.RoomDatabase.query(RoomDatabase.kt:484)
at androidx.room.RoomDatabase.query$default(RoomDatabase.kt:478)
at androidx.room.InvalidationTracker$refreshRunnable$1.checkUpdatedTable(InvalidationTracker.kt:408)
at androidx.room.InvalidationTracker$refreshRunnable$1.run(InvalidationTracker.kt:373)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
Класс базы данных

Код: Выделить всё

@Database(entities = {UserFood.class}, version = 1, exportSchema = false)
public abstract class UserFoodDatabase extends RoomDatabase {
public static volatile UserFoodDatabase userFoodDatabase;

public abstract UserFoodDao daoAccess();

public static UserFoodDatabase getDatabase(final Context context) {
if (userFoodDatabase == null) {
synchronized (UserFoodDatabase.class) {
if (userFoodDatabase == null) {
userFoodDatabase = Room.databaseBuilder(context.getApplicationContext(),
UserFoodDatabase.class, USER_FOODS_DB_NAME)
.addCallback(roomCallback)
.build();
}
}
}
return userFoodDatabase;
}

public static Callback roomCallback = new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
Log.e("DATABASECHECK", "Database created");
db.execSQL("PRAGMA encoding = 'UTF-8';");
}

@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
super.onOpen(db);
Log.e("DATABASECHECK ", "Database open");
db.execSQL("PRAGMA encoding = 'UTF-8';");
}
};
}
FoodListActivity

Код: Выделить всё

public class FoodListActivity extends AppCompatActivity {
UserFoodDatabase userFoodDatabase;
@SuppressLint("RestrictedApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_food_list);

userFoodDatabase = UserFoodDatabase.getDatabase(getApplicationContext());
Log.e("DATABASECHECK", "isOpen: " + userFoodDatabase.isOpen());
ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());
executor.execute(() -> {
try {
userFoodDao = userFoodDatabase.daoAccess();
handler.post(new Runnable() {
@Override
public void run() {
loadData();
}
});
} finally {
executor.shutdown();
}
});
}

@Override
protected void onDestroy() {
Log.d("TAG_LIFE", "onDestroy");
userFoodDatabase.close();
super.onDestroy();
}
}
Мне не удалось найти ответ на этот тип ошибки в решениях для баз данных комнат.

Подробнее здесь: https://stackoverflow.com/questions/784 ... d-room-orm
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Комната Android - не может запустить трекер недействительной. ДБ закрыт?
    Anonymous » » в форуме Android
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Пейджинг3 не лишает аннулирования Pagingsource при изменении DB
    Anonymous » » в форуме Android
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Codeigniter меняет ORM php-activerecord на новый ORM для PHP 8.2
    Гость » » в форуме Php
    0 Ответы
    72 Просмотры
    Последнее сообщение Гость
  • Ошибка Mikro-Orm: не указан драйвер при запуске команд миграции Mikro ORM против скомпилированных файлов JS
    Anonymous » » в форуме Javascript
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Невозможно добавить несколько сообщений AIS в трекер Pyais.
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»