我想了解在多个线程中使用RealmDB的推荐实践。
我的情况是:我正在使用一个线程循环遍历RealmDB中的记录,并执行某些操作。根据上一个操作的响应,我想从另一个线程中删除记录。
如何最好地实现这一点?
我想了解在多个线程中使用RealmDB的推荐实践。
我的情况是:我正在使用一个线程循环遍历RealmDB中的记录,并执行某些操作。根据上一个操作的响应,我想从另一个线程中删除记录。
如何最好地实现这一点?
realm.where(GitHubUser.class).findAll().asObservable()
.filter(RealmResults::isLoaded)
.filter(RealmResults::isValid)
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(gitHubUsers -> {
for (GitHubUser gitHubUser : gitHubUsers) {
Log.e("TAG", "data = " + gitHubUser.getLogin());
}
});
还有一个对应的 addChangeListener 版本
RealmResults realmResults = realm.where(GitHubUser.class).findAll();
realmResults.addChangeListener(new RealmChangeListener<RealmResults>() {
@Override
public void onChange(RealmResults element) {
for (GitHubUser gitHubUser : gitHubUsers) {
Log.e("TAG", "data = " + gitHubUser.getLogin());
}
}
});
for (GitHubUser gitHubUser : gitHubUsers) {
Log.e("TAG", "data = " + gitHubUser.getLogin());
}
假设你已经获得了触发器并希望在单独的线程上删除其中一个条目,那么你应该做的是获取一个新的Realm实例,按下面所示删除条目,然后关闭Realm实例。这样,您将不会遇到任何线程问题,并且在您删除条目后,您的读取查询会收到通知,您可以使用更新后的数据更新视图。
new Thread(() -> {
Realm realm1 = Realm.getDefaultInstance();
GitHubUser gitHubUser = realm1.where(GitHubUser.class)
.equalTo("login", "loginString")
.findFirst();
if (gitHubUser != null) {
realm1.executeTransaction(realm2 -> gitHubUser.deleteFromRealm());
}
realm1.close();
}).run();