我已经在我的应用程序中实现了Room Persistence Library。使用这个我 1,向表中添加数据 2.显示 3.删除表 我正在循环执行这三个步骤。 但是这里的问题是表内容只有在重新启动应用程序后才会被删除。意味着直到我重新启动应用程序,表数据才会被删除。 我的代码在这里
添加,读取,显示数据库表
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();
}
我该如何解决此问题? 请询问您是否需要更多详细信息。
答案 0 :(得分:1)
您似乎只是在删除数据,而不用听数据的更改。
请考虑使用LiveData
从数据库中获取数据,并在LiveData
或Fragment
中观察Activity
。这样,您的视图将始终知道数据更改。
另一件事是,您可能在删除数据后手动检查数据更改。如果是这样:请发布该代码段的代码。
答案 1 :(得分:1)
我犯了一个愚蠢的错误,我使用信息字符串显示数据库表值。但是我没有在每次循环迭代中都将其设置为null。因此,即使数据库表已被删除,它也可以存储先前循环迭代中的数据!