【问题标题】:RxJava2 + Retrofit black screen at data requestRxJava2 +在数据请求时改造黑屏
【发布时间】:2017-05-20 09:33:44
【问题描述】:

我在尝试使用 RxJava2 和 Retrofit2(在 Kotlin 中)检索一些 Api 数据时遇到了一个 android 应用程序的问题。执行调用后,屏幕变黑,应用程序不再响应,没有任何日志消息。

我使用的通话网址如下:

api/apartments?projection={"id":1,"address":1}

这个调用的Service接口是这个:

    @GET("api/apartments?projection={\"id\":1,\"address\":1}")
    fun getAllApartments(@Header(AUTHORIZATION) auth: String): Single<List<APTLIST>>

这是我执行调用的方式:

  override fun getAllApartments(): Single<List<APTLIST>> = retrofit.create(ApartmentsService::class.java).getAllApartments("$BEARER$token")

这就是我调用函数的方式:

getAllApartmentsUseCase.getAllApartments()
    .subscribe(
        {
          apartments.clear()
          apartments.addAll(it)
          view.showApartments(apartments)
        },
        { println(it.message) }
    )

此调用适用于 Postman,结果如下:

[
  {
    "_id": "591ecaca861a528a5b4c3d90",
    "id": "ROC 03"
  },
  {
    "_id": "591a0fb2861a528a5b4c3d60"
  },
  {
    "_id": "58be94d484c4b0a468fb93e0",
    "id": "CAN 2.3",
    "address": "Els Refugis"
  }
] 

【问题讨论】:

  • 只是先尝试​​消费端点而不返回单个。不确定您的问题与 RX 有关
  • 似乎不是,当通过 .execute() 执行带有改造的同步调用时,它也会因黑屏而冻结。也许这就是我使用此 URL 查询的方式?
  • 不熟悉android mate。尝试向端点发出一个非常简单的请求

标签: android kotlin retrofit2 rx-java2


【解决方案1】:

我猜你是在主线程中进行网络调用。奇怪的是,你得到的只是 ANR 而不是 android.os.NetworkOnMainThreadException。

getAllApartmentsUseCase
    .getAllApartments()

    .subscribeOn(Schedulers.io())  //scheduler in which observable will execute
    .observeOn(AndroidSchedulers.mainThread()) //scheduler in which subscriber's methods will be called

    .subscribe(/*subscriber*/)

https://medium.com/upday-devs/rxjava-subscribeon-vs-observeon-9af518ded53a

【讨论】:

    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 2019-03-12
    • 2019-06-14
    • 2019-02-07
    • 2018-02-09
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多