当前位置: 首页 > 知识库问答 >
问题:

Mapsforge不从域重新绘制集群POI

冉伯寅
2023-03-14

我使用Realm从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));
                    }
                }
            });

共有1个答案

郏佐
2023-03-14

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

     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));
                }
            }
        });
 类似资料:
  • 我想重新绘制我的屏幕。到目前为止,它所做的只是在第一个屏幕上的头部应该在的地方显示一个点。这很好,但是我在代码中写了我想每秒将头部向下移动10个像素。我正在打印头部应该在的位置,在命令提示符中它显示y值确实在增加。但是在我的屏幕上,头部没有移动。 我尝试过使用revalidate方法,尝试扩展canvas类而不是jframe,我尝试过只为paint方法使用不同的类,我尝试过用paintCompon

  • 如果答案是肯定的,该怎么做?最初,我使用repaint()调用paintComponent(图形);但是,最近我意识到repaint()实际上是repaint(0,0,width,height),它每次都重新绘制所有内容。如果我使用带有参数的repaint()来指定脏区域,它将以何种方式将这样的数据传递给paintComponent(图形)?

  • 问题内容: 我在程序开始时,根据数据库中的某些内容,以编程方式在JScrollPane中添加了许多组件(JPanels,JLabels等)。 似乎对于GUI(?)而言,此过程太快了,因此JScrollPane并不总是正确更新,即,即使内部JPanel大于可见区域,滚动条也不可见。 调整窗口大小(JFrame)可以解决此问题,因为我认为Java在调整组件大小时会重新打印它们。 作为测试,我添加了一个

  • 编辑:当我拖动边框时,某种刷新被发送,我需要弄清楚并手动发送相同的刷新。 请注意,我已经尝试使用revalidate()和repaint()。 当使用JFrame和JPanel来显示一个框架时,我试图使框架的大小易于改变。 null 此外,一个重要的注意事项是,当您拖动边框时,白条会消失,并正确地重新加载/刷新内容(即使您只是少量拖动)

  • 我有一个正在添加JLabel的JPanel。然后我想删除所有的JLabel并添加一些新的。 所以我做了以下几点: 这很好。当我在这之后开始一个新线程时,我的问题就出现了,比如: 然后原始JLabels的输出仍然可见。我读到重新验证过程是一个长时间运行的任务,因此firstProducer线程正在启动,而重新验证正在进行并产生冲突。处理这个问题的最佳方法是什么?

  • 我试图绘制一个矩形,它的位置每秒钟更新一次,因为我有一个类,它扩展了JPanel,在它里面我重写了油漆(或油漆组件)function_我已经尝试了这两个_但显然这个函数只被调用一次,正如下面的代码所示,当我试图用reaint函数在无限循环中调用它时,它没有被调用,我能做什么? 上面的代码是图形部分,下面是主函数,它位于另一个类中: 在上面的代码中,食物。加法器是矩形位置更新的地方,我已经检查过了,