有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

error: Not sure how to convert a Cursor to this method's return type (java.lang.Integer).

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

下面是我的代码

UserDao。java

@Dao
public interface UserDao {

   @Query("SELECT * FROM Users")
   LiveData<Integer> isDbEmpty();
}    

用户存储库。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;
}

}  

用户视图模型。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;
 }
}

主要活动。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();
            }
        }
    });

 }

有人请让我知道我做错了什么。任何帮助都将不胜感激

谢谢


共 (1) 个答案

  1. # 1 楼答案

    UserDao上的返回类型应为LiveData<List<User>>,选择后只需检查从该查询返回的列表的大小

    当您放置Integer并且查询是来自该表的SELECT时,Room不知道User表如何匹配Integer

       @Query("SELECT * FROM Users")
       LiveData<List<User>> selectAllUsers();
    

    当您调用该方法时,只需检查if(usersList.size() != 0){}