我使用领域从db加载poi。接下来,将此点添加到Mapsforge的集群实现中。此代码运行良好:
RealmResults<GasolineRealm> gasolineRealms = presenter.getRealm().where(GasolineRealm.class)
.findAll();
for(int i=0; i<gasolineRealms.size(); i++){
geoItems.add(new GasolineGeoItem(gasolineRealms.get(i).getId(),
gasolineRealms.get(i).getLocalizationRealms().get(0).getTitle(),
gasolineRealms.get(i).getCoordinateLatitude(),
gasolineRealms.get(i).getCoordinateLongitude()));
clusterer.addItem(geoItems.get(i));
}
它在地图上绘制了所有POI,但是如果我使用RXJAVA进行领域集群,则永远不要在地图上添加POI。这是代码:
Realm.getDefaultInstance().where(GasolineRealm.class)
.findAllAsync()
.asObservable()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RealmResults<GasolineRealm>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(RealmResults<GasolineRealm> gasolineRealms) {
for(int i=0; i<gasolineRealms.size(); i++){
geoItems.add(new GasolineGeoItem(gasolineRealms.get(i).getId(),
gasolineRealms.get(i).getLocalizationRealms().get(0).getTitle(),
gasolineRealms.get(i).getCoordinateLatitude(),
gasolineRealms.get(i).getCoordinateLongitude()));
clusterer.addItem(geoItems.get(i));
}
}
});
如果您这样做的话,两者几乎是等效的
Subscription subscription = presenter.getRealm().where(GasolineRealm.class)
.findAllAsync()
.asObservable()
.filter(RealmResults::isLoaded)
.first()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RealmResults<GasolineRealm>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(RealmResults<GasolineRealm> gasolineRealms) {
for(int i=0; i<gasolineRealms.size(); i++){
GasolineRealm gasolineRealm = gasolineRealms.get(i);
geoItems.add(new GasolineGeoItem(gasolineRealm.getId(),
gasolineRealm.getLocalizationRealms().get(0).getTitle(),
gasolineRealm.getCoordinateLatitude(),
gasolineRealm.getCoordinateLongitude()));
clusterer.addItem(geoItems.get(i));
}
}
});