【问题标题】:Trouble parsing data with RxJava + Kotlin使用 RxJava + Kotlin 解析数据时遇到问题
【发布时间】:2017-07-10 16:51:49
【问题描述】:

所以我试图解析返回特定用户组的 JSON 响应。一切都正确返回,我尝试将它添加到一个可变列表中,该列表应该在我的整个文件中保持不变。

private var GROUPS: MutableList<GroupObject> = ArrayList()

我的 RxJava 在这里调用

val getUserGroups = ApiProvider.getUserGroups()
    compositeDisposable.add(
            getUserGroups.getUserGroups(prefs!!.accessToken)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe ({
                        result ->
                        result.groups.mapTo(GROUPS) {
                            GroupObject (
                                    it.id, it.groupName
                            )
                        }
                    }, { error ->
                        error.printStackTrace()
                    })
    )

当我打印出 result.groups 时,一切看起来都很好,甚至打印出 GROUPS[0] 也会给我正确的信息。但是,当我尝试打印出 GROUPS[0] 时,在这个compositeDisposable 之外的任何地方,应用程序都会崩溃并说它为空。我在这里处理一个明显的范围问题?这个compositeDisposable 是否仅将我的数据保存在订阅方法本身中?在这里的任何帮助将不胜感激。

编辑:进一步添加以下代码,在第一个 system.out 中显示信息,在第二个中为空。

val getUserGroups = ApiProvider.getUserGroups()
    compositeDisposable.add(
            getUserGroups.getUserGroups(prefs!!.accessToken)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe ({
                        result ->
                        result.groups.mapTo(GROUPS) {
                            GroupObject (
                                    it.id, it.groupName
                            )
                        }
                        System.out.println(GROUPS[0])
                    }, { error ->
                        error.printStackTrace()
                    })
    )
    System.out.println(GROUPS[0])

【问题讨论】:

  • 你应该了解同步和异步。 stackoverflow.com/questions/748175/…
  • @muthuraj 我有点熟悉。在我当前的实现中,这是否意味着我实际上并没有访问结果值?如何将异步获取的值分配给组对象?

标签: android rx-java kotlin retrofit2


【解决方案1】:

在异步响应中移动我的视图的实例化导致正确的数据显示。

【讨论】:

  • 是的,这是因为您在您的Observable 实际调用onNext 之前调用了System.out.println(GROUPS[0])。如您所料,这是因为您的一次性用品是异步的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多