如何检查房间数据库是否为空 [英] How to check if room database is empty or not

查看:80
本文介绍了如何检查房间数据库是否为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在进行网络呼叫之前检查房间数据库是否为空.但显示以下错误.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆