Unable to delete table from room database

问题: I have implemented Room Persistence Library in my App. Using this i'm 1.Adding data to a table 2.Displaying it 3.Deleting table Im Doing these three steps In a loop. But Pr...

问题:

I have implemented Room Persistence Library in my App. Using this i'm 1.Adding data to a table 2.Displaying it 3.Deleting table Im Doing these three steps In a loop. But Problem here is Table content gets deleted only after restart the app. Means table data wont get deleted until i restart the app. My code is here

Adding,Reading,Displaying Database table

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

Asynch Task Class for Adding,Reading,Deleting

 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+"nn"+"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);
        }
    }

data access object

@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();
}

How can i resolve this issue? Please ask if you need more details.


回答1:

It looks like you are just deleting data, without listening for its changes.

Consider getting data from database using LiveData, and observing LiveData in your Fragment or Activity. That way your view will be always aware of data changes.

One more thing is that you probably are checking for data changes manually after deleting it. If so: please post your code for that block.


回答2:

I did a silly mistake , I was using info string to display the database table value. but I was not setting it to null on every loop iteration. So it used to store data from previous loop iteration as well , Even though the database table was getting deleted!

  • 发表于 2019-03-29 20:12
  • 阅读 ( 184 )
  • 分类:sof

条评论

请先 登录 后评论
不写代码的码农
小编

篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除