【问题标题】:RxJava use Single data and return CompletableRxJava 使用 Single 数据并返回 Completable
【发布时间】:2019-04-02 16:59:05
【问题描述】:

我正在 Android 中使用 RxJava,我正在尝试创建一个将使用 Retrofit 调用 API 的函数,关键是我想在 ViewModel 中处理 API 数据并将其发送到 View 一个 Completable , 通知请求是否成功。

我曾考虑过使用主题,然后在订阅函数中调用主题 onComplete 或 onError,但我不确定这是否是一个好习惯。

我想要的是这样的

fun apiCall(paramA:String):Completable{
        webservice.myApiCall(paramA).subscribe { t1, t2 ->
            if (t1  != null){
                handleData(t1)
            }else {
                handleError(t2)
            }
        }
        //The Completable should be returned here
    }

【问题讨论】:

    标签: android kotlin rx-java2


    【解决方案1】:

    ViewModel 可能会公开一个 View 可以订阅的 LiveData。每当Single 发出一个值时,您可能会调用LiveDatapostValue 方法,View 可能会得到API 调用完成的结果。

    【讨论】:

      【解决方案2】:

      您可以在屏幕的onCreate 回调中运行 api 调用。然后订阅onViewCreated回调中的LiveData变化

      Api 调用并在 Fragment 中观察:

      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          model.getNews()
      }
      
      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
          super.onViewCreated(view, savedInstanceState)
          model.news.observe(this, Observer {
              (rv_news.adapter as NewsRecyclerAdapter).items = it
          })
      
      }
      

      数据加载逻辑和更新视图:

      val news = MutableLiveData<List<News>>()
      
      fun getNews() {
          newsRepository.listOfNews()
              .withScheduler(AndroidSchedulers.mainThread(), Schedulers.io())
              .subscribeBy(
                  onSuccess = { news.postValue(it) },
                  onError = { it.printStackTrace() }) //Here you can handle error
              .addTo(compositeDisposable)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多