Android-комната (Невозможно выполнить откат - транзакция не активна) при удалении записей - PullRequest
0 голосов
/ 21 сентября 2018

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

android.database.sqlite.SQLiteException: невозможно выполнить откат - никакая транзакция не активна (код 1) в android.database.sqlite.SQLiteConnection.nativeExecute (собственный метод) в android.database.sqlite.SQLiteConnection.execute (SQLiteConnection.java:555) в android.database.sqlite.SQLiteSession.endTransactionUnchecked (SQLiteSession.java:439) в android.database.sqlite.SQLiteransessioneSQLiteSession.java:401) в android.database.sqlite.SQLiteDatabase.endTransaction (SQLiteDatabase.java:522) в android.arch.persistence.db.framework.FrameworkSQLiteDatabase.endTransaction (FrameworkSQLiteDatabase.java:90) в android.arch.persistence.room.RoomDatabase.endTransaction (RoomDatabase.java:261) в com.ehr.Database.Daos.EmployeeDao_Impl.deleteEmployees (EmployeeDao_Impl.java:175) в com.ehr.DataRepository $ 7.run (DataRepository.java:4).util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112)в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587) в java.lang.Thread.run (Thread.java:841)

Очень важные примечания

  1. Если количество записей уменьшилось до 25 КБ, удаление работает нормально.
  2. Если я удаляю код с данными в реальном времени и с наблюдателем, удаление отлично работает с 1 миллионом записей.
  3. Если я добавлю другие действующие данные и наблюдателя, которые будут наблюдать за другой таблицей, отличной от Employee, удаление будет работать нормально.
  4. В API 27 работает хорошо.Хотя для удаления требуется некоторое время.АПИС 19,21,23 не работает.

Есть идеи?Это ошибка?

Код

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((BasicApp) getApplication()).getRepository().getNotifyEmployee().observe(this,new Observer<Integer>() {

                @Override
                public void onChanged(@Nullable Integer number) {
                    //staff
                }
});


  executors.diskIO().execute(new Runnable() {
    @Override
    public void run() {
        mDatabase.repoEmployee().deleteEmployees();
     });
  }  

} 

Дао

  @Dao
  public interface EmployeeDao {

    @Query("DELETE FROM Employee")
    void deleteEmployees();

     @Transaction @Query("SELECT COUNT(*)  FROM Employee")
     LiveData<Integer> getNotifyEmployee();
  }       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...