【发布时间】:2021-08-21 11:19:56
【问题描述】:
我的 Android 应用中有以下代码,可将本地 SQL 数据库中的数据读取到一些变量中:
Context context = getContext();
localSettingsManager = new LocalSettingsManager(context);
LocalDatabase localDatabase = Room.databaseBuilder(context, LocalDatabase.class, context.getResources().getString(R.string.database_name))
.addMigrations(MIGRATION_1_2)
.fallbackToDestructiveMigration()
.build();
DatabaseDAO databaseDAO = localDatabase.DatabaseDAO();
Observable.just(databaseDAO)
.subscribeOn(Schedulers.io())
.subscribe(dao -> {
Device device = dao.getByCid(localSettingsManager.getDeviceCid());
if(device!=null) {
currentSerialNumberString = device.serialNumber;
currentProxyConfigUrlString = device.proxyConfigURL;
currentIMEI1String = device.imei1;
currentCarrier1String = device.imei1Carrier;
currentIMEI2String = device.imei2;
currentCarrier2String = device.imei2Carrier;
currentBrandString = device.brand;
currentManufacturerString = device.manufacturer;
currentModelString = device.model;
currentMarketString = device.marketPlaceCID;
}
});
// wait for data to be read from database before accessing variables
我遇到的问题是,当我在数据库调用后立即访问从数据库分配数据的变量时,它们将在分配之前被读取。虽然我可以通过延迟半秒来“解决”问题,但这感觉不对。在继续程序执行之前等待数据库读取完成的正确方法是什么?
【问题讨论】:
-
与stackoverflow.com/questions/57330766/…基本相关。当您订阅时,您拥有所有可用的值,所以要么在那里使用它,要么使用实时数据之类的东西来观察变化
标签: java android database multithreading