【问题标题】:Mapsforge does not redraw cluster POI from RealmMapsforge 不会从 Realm 重绘集群 POI
【发布时间】:2016-11-26 02:29:10
【问题描述】:

我使用 Realm 从数据库加载 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 for Realm 集群,则永远不要在地图上添加 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));
                    }
                }
            });

【问题讨论】:

    标签: android realm mapsforge


    【解决方案1】:

    如果你这样做,两者几乎相等

         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));
                    }
                }
            });
    

    【讨论】:

    • rx 中的 ui 线程有些问题,因为我收到了所有项目并成功将它们保存在 clusterer 中。 joxi.ru/8234OjxckNYyAO
    • 但它仍然没有在地图上绘制项目
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多