[英]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
從數據庫中獲取數據,並在Fragment
或Activity
觀察LiveData
。 這樣,您的視圖將始終知道數據更改。
還有一件事是,您可能會在刪除數據后手動檢查數據更改。 如果是這樣:請發布您的代碼為該塊。
我犯了一個愚蠢的錯誤,我正在使用信息字符串來顯示數據庫表值。 但是我沒有在每次循環迭代中都將其設置為null。 因此,即使數據庫表已被刪除,它也用於存儲先前循環迭代中的數據!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.