Android Room SQlite MVVM:在插入后返回主键,并将主键捕获在一个变量中以传递给其他活动。
创始人
2024-08-15 10:30:17
0

首先,确保你的Android项目中已经添加了Room库的依赖。

在你的实体类中,使用@PrimaryKey注解来定义主键字段。例如:

@Entity(tableName = "user")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    
    public String name;
}

在你的数据访问对象(DAO)中,在插入方法上使用@Insert注解,并设置返回类型为long,以便返回插入后的主键值。例如:

@Dao
public interface UserDao {
    @Insert
    long insert(User user);
}

在你的Repository类中,调用插入方法,并返回插入后的主键值。例如:

public class UserRepository {
    private UserDao userDao;

    public UserRepository(Context context) {
        AppDatabase db = AppDatabase.getInstance(context);
        userDao = db.userDao();
    }

    public long insertUser(User user) {
        return userDao.insert(user);
    }
}

在你的ViewModel类中,创建一个MutableLiveData对象,用于接收插入后的主键值。在插入方法中,将主键值设置给这个MutableLiveData对象。例如:

public class UserViewModel extends ViewModel {
    private UserRepository userRepository;
    private MutableLiveData insertedId = new MutableLiveData<>();

    public UserViewModel() {
        userRepository = new UserRepository();
    }

    public void insertUser(User user) {
        long id = userRepository.insertUser(user);
        insertedId.setValue(id);
    }

    public LiveData getInsertedId() {
        return insertedId;
    }
}

在你的Activity或Fragment中,观察getInsertedId方法返回的LiveData对象,并在其onChanged回调中获取插入后的主键值。例如:

public class MainActivity extends AppCompatActivity {
    private UserViewModel userViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        userViewModel = ViewModelProviders.of(this).get(UserViewModel.class);

        User user = new User();
        user.name = "John Doe";

        userViewModel.insertUser(user);
        userViewModel.getInsertedId().observe(this, new Observer() {
            @Override
            public void onChanged(Long id) {
                // 在这里获取插入后的主键值
                Toast.makeText(MainActivity.this, "Inserted id: " + id, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

这样,当插入操作完成后,你就可以在观察到的LiveData对象的回调中获取到插入后的主键值,并进行相应的处理。

相关内容

热门资讯

透视安装!aapoker公共底... 透视安装!aapoker公共底牌(透视)ai插件(果然是有挂);1、首先打开aapoker公共底牌最...
透视黑科技!德普之星有辅助软件... 透视黑科技!德普之星有辅助软件吗(透视)透视挂(真是存在有挂);1、构建自己的德普之星有辅助软件吗辅...
透视代打!德普之星有辅助软件吗... 透视代打!德普之星有辅助软件吗(透视)辅助软件(好像真的有挂);1、德普之星有辅助软件吗透视辅助简单...
透视智能ai!aapoker透... 透视智能ai!aapoker透视脚本(透视)插件下载(原来是有挂);1、aapoker透视脚本系统规...
透视实锤!德普之星怎么设置埋牌... 透视实锤!德普之星怎么设置埋牌(透视)辅助软件(确实是有挂)1、这是跨平台的德普之星怎么设置埋牌黑科...
透视神器!aapoker发牌逻... 透视神器!aapoker发牌逻辑(透视)真的假的(本来是有挂)1、起透看视 aapoker发牌逻辑透...
透视计算!德扑圈有透视吗(透视... 透视计算!德扑圈有透视吗(透视)透视辅助插件(其实是真的有挂)德扑圈有透视吗软件透明挂微扑克wpk插...
透视线上!aapoker辅助怎... 透视线上!aapoker辅助怎么用(透视)辅助插件工具(一直有挂)1、下载好aapoker辅助怎么用...
透视苹果版!德普之星怎么设置埋... 透视苹果版!德普之星怎么设置埋牌(透视)辅助软件(果然是有挂);1、超多福利:超高返利,海量正版游戏...
透视辅助!aapoker怎么提... 透视辅助!aapoker怎么提高中牌率(透视)透视脚本入口(本来有挂);暗藏猫腻,小编详细说明aap...