如何检查房间数据库是否为空 [英] How to check if room database is empty or not
问题描述
我正在尝试在进行网络呼叫之前检查房间数据库是否为空.但显示以下错误.
I am trying to check if room database is empty or not before making a network call. but it is showing below error.
错误:不确定如何将Cursor转换为该方法的返回类型(java.lang.Integer).
error: Not sure how to convert a Cursor to this method's return type (java.lang.Integer).
我一直在做的是,当应用启动时,我正在检查房间数据库中的行数是否为空,然后才进行网络呼叫.
What I have been doing is when app starts I am checking row count in room databse if it is null then I am making a network call.
下面是我的代码.
UserDao.java
@Dao
public interface UserDao {
@Query("SELECT * FROM Users")
LiveData<Integer> isDbEmpty();
}
UserRepository.java
public class UserRepository {
private Context context;
private UserDb userDb;
private LiveData<Integer> checkDb;
private UserDao userDao;
public UserRepository(Context context) {
this.context = context;
userDb = UserDb.getInstance(context);
userDao = userDb.userDao();
checkDb = userDao.isDbEmpty();
}
public LiveData<Integer> isDbEmpty(){
return checkDb;
}
}
UserViewModel.java
public class UserViewModel extends AndroidViewModel {
private UserRepository repo;
private LiveData<Integer> checkDb;
public UserViewModel(@NonNull Application application) {
super(application);
repo = new UserRepository(application);
checkDb = repo.isDbEmpty();
}
public LiveData<Integer> getCheckDb() {
return checkDb;
}
}
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
userRepository = new UserRepository(this);
userModel = ViewModelProviders.of(MainActivity.this).get(UserViewModel.class);
userModel.getCheckDb().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer rowCount) {
if(rowCount == 0){
userRepository.getUserList();
}
}
});
}
请让我知道我做错了什么.任何帮助将不胜感激.
Someone please let me know what I am doing wrong. Any help would be appreciated.
谢谢
推荐答案
UserDao
上的返回类型应该是 LiveData< List< User>>
选择之后,只需检查从该查询返回的列表的大小即可.
The return type on your UserDao
should be a LiveData<List<User>>
and than after selection just check the size of the list returned from that query.
当您输入 Integer
且查询是该表中的 SELECT
时, Room
不知道 User
表与 Integer
When you put Integer
and the query is a SELECT
from that table, Room
doesn't know how the User
table matches an Integer
@Query("SELECT * FROM Users")
LiveData<List<User>> selectAllUsers();
与调用该方法相比,只需检查 if(usersList.size()!= 0){}
And than when you call that method just check if(usersList.size() != 0){}
这篇关于如何检查房间数据库是否为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!