将实体插入会议室数据库后,检索ID的正确方法是什么?

时间:2018-08-04 19:21:10

标签: android mvvm observable android-room

最后主要弄清了房间持久性和数据绑定的工作原理,我遇到了下一个问题。

我正在尝试将用户注册到我的应用程序,我需要将通过将其角色插入数据库而创建的ID传递给主要活动。

Google文档说,您可以返回一个带有插入参数的long。当我尝试我的存储库中的asynctask时,该参数不能是原始的,也就是长的。

当存在用于登录的字符时,我可以很好地检索ID,但是当我尝试创建新字符时,我无法以相同的方式接收ID。就像这样:

viewModel.login(mEmail, mPassword).observe(Login.this, 
                           new Observer<Character>() {
    @Override
    public void onChanged(@Nullable Character character) {
        if (character == null) {

            Toast.makeText(Login.this, "Email does not exist.", Toast.LENGTH_SHORT).show();
            dbValid = false;

        } else if (character.getEmail().equals(mEmail) 
                && character.getPassword().equals(mPassword)) {
            Toast.makeText(Login.this, "SUCCESS", Toast.LENGTH_SHORT).show();
            Intent mainMenu = new Intent(Login.this, MainMenu.class);
            id = character.getId();
            mainMenu.putExtra("id", id);
            startActivity(mainMenu);
            dbValid = true;

        } else if(character.getEmail().equals(mEmail) 
               || character.getPassword().equals(mPassword)) {

            Toast.makeText(Login.this, "Email or password is wrong.", Toast.LENGTH_SHORT).show();
            dbValid = false;
        }
    }
});

我有一个扩展AsyncTask的类,在doInBackground中,我为该播放器创建了所有用户选择的新字符集,然后将该播放器插入数据库。每当我尝试在任何地方获取ID时,我都会为null或0。

viewModel.getByEmail(mEmail).observe(Register.this,
                        new Observer<Character>() {
    @Override
    public void onChanged(@Nullable Character character) {
        if(character == null){
            player = new Character();
            player.setName(username);
            player.setGender(gender);
            player.setVillage(villageText);
            player.setEmail(mEmail);
            player.setPassword(mPassword);
            dbValid = true;

            viewModel.insert(player);
        }else{
            dbValid = false;
        }

播放器和所有数据都正确插入,并且有一个ID号,但我无法立即访问它。 我尝试在后台调用整个插入,然后执行执行以尝试更新字符,然后设置另一个可观察的对象并使用getId()。 试过了

int id = viewModel.findByEmail(mEmail).getValue.getId();

0 个答案:

没有答案