Android Kotlin Realm正确的查询方式+返回Bg主题上的非托管项目

什么是正确的方式来查询和返回领域项目的非托管结果,在后台线程中的一切? 我正在使用这样的一些thibf:

return Observable.just(1) .subscribeOn(Schedulers.io()) .map { val realm = Realm.getDefaultInstance() val results = realm.where(ItemRealm::class.java) .equalTo("sent", false).findAll() realm to results } .map { val (realm, results) = it val unManagedResults = realm.copyFromRealm(results) realm.close() unManagedResults } } 

然后将这个可观察元素与另一个将结果发布到服务器的元素链接起来。

解决方案的工作,虽然在这方面有点难看:

  • 没有适当的方式来包装realmQuery在一个可观察的,因为没有这样的作弊(至少我知道)在后台线程中打开一个realInstance的方式,所以我需要使用这个假的可观察Observable.just(1)
  • 不是在第一张和第二张地图内打开和关闭Realm实例的最佳位置

  • 我不知道在复制所有项目后是否保证领域实例是关闭的。

那么在后台线程上查询和返回非托管结果的正确方式是什么(在某些上下文中,我需要将结果发送到服务器,在后台,因为这个任务是完全独立于我的应用程序当前数据流,所以它应该脱离主线程)。

建议版本:

 return Observable.fromCallable { Realm.getDefaultInstance().use { realm -> realm.copyFromRealm( realm.where(ItemRealm::class.java) .equalTo(ItemRealm.FIELD_SEND, false).findAll() ) } } 

One Solution collect form web for “Android Kotlin Realm正确的查询方式+返回Bg主题上的非托管项目”

这就是你如何将你的Realm对象变成非托管的:

  return Observable.defer(() -> { try(Realm realm = Realm.getDefaultInstance()) { return Observable.just( realm.copyFromRealm( realm.where(ItemRealm.class).equalTo("sent", false).findAll() ) ); } }).subscribeOn(Schedulers.io()); 

虽然这个答案是Java,但Kotlin的答案只是一步之遥。

  • 如何转换Array <T?>? 到Kotlin的Array <T>中
  • “意外覆盖:以下声明具有相同的JVM签名”在实现Java接口时
  • @StringRes,@DrawableRes,@LayoutRes等android注释lint检查与kotlin参数
  • 杰克逊@JsonIgnoreProperties多个字段与Kotlin
  • Kotlin For Android开始
  • 在lambda kotlin变通方法中的智能转换变量
  • 如何写while循环与在kotlin中的responseInputStream.read - (while((i = responseInputStream.read(byteContainer))
  • 是否有限制stdlib函数在Kotlin中的可见性?
  • 为什么我们使用“伴侣对象”作为Kotlin中Java静态字段的一种替代?
  • 如何在Kotlin中创建动态/透明代理?
  • Kotlin类重新加载伴侣对象/函数
  • Kotlin language will be the best programming language for Android.