2016-11-25 6 views
0

DBからPOIをロードするためにレルムを使用します。次に、このポイントをmapsforgeによるクラスタ実現に追加します。 このコードはうまく機能:マップフォージはレルムからクラスタPOIを再描画しません

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

ここ コードですあなたがこれをした場合、2つはほぼ同等です

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

rxのuiスレッドで何か問題があります。なぜなら、すべてのアイテムを受け取り、clustererに正常に保存するからです。 http://joxi.ru/8234OjxckNYyAO – Drake

+0

でも地図上にアイテムを描画しません – Drake

0

私のプロジェクトで両方の例が...標準ビューとよく

を働いている私は、以下の方法で実現しようとする助言:

Subscription s = Observable.create(new Observable.OnSubscribe<List<GasolineRealm>>() { 
     @Override 
     public void call(Subscriber<? super List<GasolineRealm>> subscriber) { 
      Realm realm = presenter.getRealm(); 
      RealmResults<GasolineRealm> gasolineRealms = realm.where(GasolineRealm.class).findAll(); 
      subscriber.onNext(realm.copyFromRealm(gasolineRealms)); 
      realm.close(); 
      subscriber.onCompleted(); 
     } 
    }).subscribe(new Subscriber<List<GasolineRealm>>() { 
     @Override 
     public void onCompleted() { 
      Log.i(TAG, "GasolineRealm Subscriber is completed"); 
     } 

     @Override 
     public void onError(Throwable throwable) { 
      Log.e(TAG, "GasolineRealm Subscriber onError " + throwable.getMessage()); 
     } 

     @Override 
     public void onNext(List<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)); 
      } 
     } 
    }); 
+0

いいえ、残念ながらうまくいきません – Drake

+0

レルムがゼロコピーデータベースとして設計されているため、レルムからのコピーは必要ではありません。 – EpicPandaForce

+0

また、Observable.create()の呼び出しはRxJava1の* very bad *です。 – EpicPandaForce

関連する問題