Невозможно удалить таблицу из базы данных комнаты - PullRequest
1 голос
/ 28 марта 2019

В моем приложении реализована библиотека постоянных номеров.Используя это я 1. Добавление данных в таблицу 2. Отображение их 3. Удаление таблицы Im Выполнение этих трех шагов в цикле.Но проблема здесь в том, что содержимое таблицы удаляется только после перезапуска приложения.Означает, что данные таблицы не будут удалены, пока я не перезапущу приложение.Мой код здесь

Добавление, чтение, отображение таблицы базы данных

public void DatabaseTask{
for(getting data from web server){
//Adding them to database
 AddToDatabase addToDatabase=new AddToDatabase(file.getId(),file.getName(),"punith@gmail.com");
                addToDatabase.execute();
}
//Reading Table from Database
  ReadFromDatabase readFromDatabase=new ReadFromDatabase();
            readFromDatabase.execute();
//Deleting table from database
  DeleteFromDatabase deleteFromDatabase=new DeleteFromDatabase();
            deleteFromDatabase.execute();

}
This DatabaseTask class will be executed every 15 minutes

Асинхронный класс задач для добавления, чтения, удаления

 private class AddToDatabase extends AsyncTask<String,String,String>{
      String id;
      String name,email;
        public AddToDatabase(String id,String name, String email){
            this.id=id;
            this.name=name;
            this.email=email;

      }
        @Override
        protected String doInBackground(String... strings) {
            User user=new User();
            user.setId(id);
            user.setName(name);
            user.setEmail(email);
            MainActivity.myAppDatabase.myDao().addUser(user);
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            Log.d("mPavan001", "add done");
            super.onPostExecute(s);
        }
    }
    private class ReadFromDatabase extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... strings) {

            List<User> users=MainActivity.myAppDatabase.myDao().getUsers();
            for(User usr: users){
                String id=usr.getId();
                String name=usr.getName();
                String email=usr.getEmail();
                 info=info+"\n\n"+"id :"+id+"\n Name :"+name+"\n Email :"+email;
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            Log.d("mPavan001", "onPostExecute: "+info);
            super.onPostExecute(s);
        }
    }
    private class DeleteFromDatabase extends AsyncTask<String,String,String>{

        @Override
        protected String doInBackground(String... strings) {

            MainActivity.myAppDatabase.myDao().deleteAll();

            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            Log.d("mPavan001", "delete done");
            super.onPostExecute(s);
        }
    }

объекта доступа к данным

@Dao
public interface MyDao {

    @Insert
    public void addUser(User user);

    @Query("select * from users")
    public List<User> getUsers();

    @Query("DELETE FROM users")
    public void deleteAll();
}

Как я могу решить эту проблему?Пожалуйста, спросите, если вам нужно больше деталей.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Я сделал глупую ошибку, я использовал информационную строку для отображения значения таблицы базы данных. но я не устанавливал его в нуль на каждой итерации цикла. Таким образом, он также сохранял данные из предыдущей итерации цикла, хотя таблица базы данных удалялась!

1 голос
/ 28 марта 2019

Похоже, вы просто удаляете данные, не прислушиваясь к их изменениям.

Рассмотрите возможность получения данных из базы данных, используя LiveData, и наблюдайте LiveData в вашем Fragment или Activity.Таким образом, ваше представление всегда будет знать об изменениях данных.

Еще одна вещь - вы, вероятно, проверяете изменения данных вручную после их удаления.Если это так, пожалуйста, оставьте свой код для этого блока.

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