Android-ROOM组件

Android-ROOM组件
可爱可倾ROOM
本文介绍了 ROOM 数据库的基本概念和使用方法。
ROOM 数据库
一个database可以同时存在: N个@DAO, N个@Entity, 1个@Database, 1个DBEngine
查询回调的两种方式
Java 8或更高版本,推荐使用 Consumer 接口的方法。
使用 Consumer 接口
Consumer
特点:
灵活性: 直接在调用点定义如何处理数据。 简洁性: 使用 lambda 表达式可以使代码更加简洁和直观。 依赖于 Java 8: 依赖于 Java 8 的特性,如函数式接口和 lambda 表达式。
public void queryAllDatas(DataQueryCallback callback) {
databaseExecutor.execute(() -> {
List<Data> allDatas = dataDao.getAllDatas();
// 确保回调在主线程上执行(如果涉及UI操作)
new Handler(Looper.getMainLooper()).post(() -> callback.onDataRetrieved(allDatas));
// 直接在后台线程处理数据
callback.onDataRetrieved(allDatas);
});
}
// 另外的接口文件
public interface DataQueryCallback {
void onDataRetrieved(List<Data> dataList);
}
// 使用
DBEngine dbEngine = new DBEngine(requireContext());
dbEngine.queryAllDatas(dataList -> {
// 在此处处理和使用 dataList
});
使用自定义回调接口
定义一个自定义的回调接口 (DataQueryCallback),并在执行数据库操作的类中使用它。 这种方式更传统,通常在 Java 8 之前的代码中更常见。
特点:
结构化: 通过定义一个专用的回调接口,使得代码的结构更加清晰。 可重用性: 如果多个地方需要使用相同的回调逻辑,这种方式可以提高代码的可重用性。 适用性更广: 不依赖于 Java 8,可以在更老的 Java 版本中使用。
public void querySingleAccountData(String username, Consumer<AccountData> callback) {
databaseWriteExecutor.execute(() -> {
AccountData accountData = accountDataDao.getSingleAccountData(username);
callback.accept(accountData);
});
}
// 使用
dbEngine.querySingleAccountData(username, accountData -> {
if (accountData != null) {
// 这里处理查询到的 AccountData
// 注意:这可能在后台线程上执行,如果需要更新UI,请确保在主线程上运行
runOnUiThread(() -> {
// 更新UI,例如显示账户数据
});
}
});
评论
匿名评论隐私政策
TwikooGiscus
✅ 若未加载出评论区,请刷新页面~






