【问题标题】:Close Realm instance, when i use Realm query with RxJava关闭 Realm 实例,当我将 Realm 查询与 RxJava 一起使用时
【发布时间】:2016-09-28 09:03:42
【问题描述】:

当我将查询结果作为可观察返回时,我必须在哪里关闭领域实例?示例:

public Observable<RealmResults<Weather>> getWeatherForecast() {
       final Realm realm = Realm.getDefaultInstance(); 

       return realm.where(Weather.class).findAllAsync().asObservable()
                .filter(RealmResults::isLoaded);
}

【问题讨论】:

    标签: java android realm rx-java


    【解决方案1】:

    有几种情况:

    1. doOnCompleted运营商:

      realm.where(Weather.class).findAllAsync().asObservable()
              .filter(RealmResults::isLoaded)
              .first()
              .doOnCompleted(new Action0() {
                   @Override
                   public void call() {
                       realm.close();
                   };
              })
      
    2. SubscriberonCompleted方法内:

      getWeatherForecast()
              .subscribe(new Subscriber<Boolean>() {
                  @Override
                  public void onCompleted() {
                      realm.close();
                  }
      
                  @Override
                  public void onError(Throwable e) {
      
                  }
      
                  @Override
                  public void onNext(Boolean aBoolean) {
                  }
              });
      

    【讨论】:

    • 谢谢!我还有其他问题,你可能知道:我不知道使用什么方式,将 ReamlResults 与异步查询一起使用并更改侦听器或使用 rxjava,例如,我何时使用回收视图?
    • 对我来说,onComplete回调不调用,当我使用它时,为什么?
    • github.com/realm/realm-java/issues/2010 -> 只需使用first() 运算符,因为您想在得到结果后关闭连接。
    • 好的,我可以关闭 doOnUnsubscribe() 上的领域实例吗?
    • 试试看。我没有测试过这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    相关资源
    最近更新 更多