首页 > 解决方案 > 如何将值从 Observable 返回到 Rxjava 2

问题描述

我遇到了onNext不能包含return的问题,但是我需要返回字符串。该请求是使用 Retrofit 和接口内的工厂 (ApiService) 发出的。

    fun getNameAnimal(name : String) : String {
       var nameAnimal = " "

       val api = ApiService.create()

       api.getAnimal("Cat")
       .subscribeOn(Schedulers.io())
       .observeOn(AndroidSchedulers.mainThread())
       .subscribe(
           { animal -> 
                 // It works
                 Log.i(LOG, animal.name) 
                 // It NOT works (empty value)
                 nameAnimal = animal.name
           },
           { error ->
                 Log.e(LOG, error.printStackTrace())
           }
       )
       return nameAnimal
    }

在日志中,答案以我需要的格式出现。

该方法位于不是活动或片段的类中。如何实施我的计划?

标签: javaandroidkotlinrx-javarx-java2

解决方案


fun getNameAnimal(name : String) : Single<String> {
   val api = ApiService.create()

   return api.getAnimal("Cat")
   .map { animal -> animal.name }
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
}

2. 在活动或片段中

apiWorkingClassInstance.getNameAnimal()
    .subscribe(
       { animalName -> 
             Log.i(LOG, animalName) 
             //todo
       },
       { error ->
             Log.e(LOG, error.printStackTrace())
       }
   )

感谢您的提示 Alex_Skvortsov


推荐阅读