Простой и понятный способ добиться этого - использовать интерфейс.
- Создать свой интерфейс
interface AnimalCallbacks {
fun onAnimalNameReturned(name: String)
}
Пусть ваш класс реализует интерфейс
class MyAnimal: AnimalCallbacks {
override fun onAnimalNameReturned(name: String) {
//handle logic here
}
}
Отсюда вы можете передать свой интерфейс в вызове метода и отправить результат обратно, используя метод, который вы определили в интерфейсе.
fun getNameAnimal(name : String, callbacks: AnimalCallbacks) {
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
callbacks.onAnimalNameReturned(animal.name)
},
{ error ->
Log.e(LOG, error.printStackTrace())
}
)
}