簡體   English   中英

無法從會議室數據庫中刪除表

[英]Unable to delete table from room database

我已經在我的應用程序中實現了Room Persistence Library。 我正在使用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

用於添加,讀取,刪除的Asynch任務類

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

我該如何解決這個問題? 請詢問您是否需要更多詳細信息。

看起來您只是在刪除數據,而沒有監聽其更改。

考慮使用LiveData從數據庫中獲取數據,並在FragmentActivity觀察LiveData 這樣,您的視圖將始終知道數據更改。

還有一件事是,您可能會在刪除數據后手動檢查數據更改。 如果是這樣:請發布您的代碼為該塊。

我犯了一個愚蠢的錯誤,我正在使用信息字符串來顯示數據庫表值。 但是我沒有在每次循環迭代中都將其設置為null。 因此,即使數據庫表已被刪除,它也用於存儲先前循環迭代中的數據!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM