Java 如何检查房间数据库是否为空

Java 如何检查房间数据库是否为空,java,android,android-room,dao,Java,Android,Android Room,Dao,在打网络电话之前,我试图检查房间数据库是否为空。 但它显示了下面的错误 错误:不确定如何将游标转换为此方法的返回类型(java.lang.Integer) 我一直在做的是,当应用程序启动时,我正在检查房间数据库中的行数,如果它为空,那么我正在进行网络呼叫 下面是我的代码 UserDao.java @Dao public interface UserDao { @Query("SELECT * FROM Users") LiveData<Integer> isDbEmpt

在打网络电话之前,我试图检查房间数据库是否为空。 但它显示了下面的错误

错误:不确定如何将游标转换为此方法的返回类型(java.lang.Integer)

我一直在做的是,当应用程序启动时,我正在检查房间数据库中的行数,如果它为空,那么我正在进行网络呼叫

下面是我的代码

UserDao.java

@Dao
public interface UserDao {

   @Query("SELECT * FROM Users")
   LiveData<Integer> isDbEmpty();
}    
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;
}

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

 }
@Dao
公共接口UserDao{
@查询(“从用户中选择*)
LiveData是空的();
}    
UserRepository.java

@Dao
public interface UserDao {

   @Query("SELECT * FROM Users")
   LiveData<Integer> isDbEmpty();
}    
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;
}

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

 }
公共类用户存储库{
私人语境;
私有用户数据库;
私有LiveData-checkDb;
私有UserDao UserDao;
公共用户存储库(上下文){
this.context=上下文;
userDb=userDb.getInstance(上下文);
userDao=userDb.userDao();
checkDb=userDao.isDbEmpty();
}
公共LiveData是空的(){
返回checkDb;
}
}  
UserViewModel.java

@Dao
public interface UserDao {

   @Query("SELECT * FROM Users")
   LiveData<Integer> isDbEmpty();
}    
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;
}

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

 }
公共类UserViewModel扩展了AndroidViewModel{
私有用户存储库回购;
私有LiveData-checkDb;
public UserViewModel(@NonNull应用程序){
超级(应用);
repo=新用户存储库(应用程序);
checkDb=repo.isDbEmpty();
}
公共LiveData getCheckDb(){
返回checkDb;
}
}
MainActivity.java

@Dao
public interface UserDao {

   @Query("SELECT * FROM Users")
   LiveData<Integer> isDbEmpty();
}    
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;
}

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

 }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
userRepository=新的userRepository(此);
userModel=ViewModelProviders.of(MainActivity.this.get)(UserViewModel.class);
userModel.getCheckDb().observe(这是一个新的观察者(){
@凌驾
更改后的公共void(整数行计数){
如果(行计数==0){
userRepository.getUserList();
}
}
});
}
有人请让我知道我做错了什么。任何帮助都将不胜感激


谢谢

您的
UserDao
上的返回类型应该是
LiveData
,选择后只需检查从该查询返回的列表的大小

当您放置
整数
并且查询是从该表中选择
时,
房间
不知道
用户
表如何匹配
整数

   @Query("SELECT * FROM Users")
   LiveData<List<User>> selectAllUsers();
@Query(“从用户中选择*)
LiveData selectAllUsers();
调用该方法时,只需检查
如果(usersList.size()!=0){}
@Query(“从用户中选择计数(*))
使用计数查询。