Контекст : Мое текущее приложение использует обычный retrofit calls
для получения данных из api
.Я действительно хотел ввести RX
в звонки, но у меня нет большого опыта с этим.Я читаю некоторые вещи в Интернете, и ни одна из них не показывает мне простой способ сделать это.Я покажу вам, что у меня есть.
Цель : Превратить то, что у меня есть, в RXJava
Это мой код:
Мой общий метод выполнения вызова, который я хочу преобразовать в RXJava
:
fun <T> performCall(call: Call<T>?, callback: OnRequestCallback<T>) {
call?.enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
when (response.code()) {
200, 201 -> {
callback.onSuccess(response.body())
}
else -> {
callback.onError(response.errorBody())
}
}
return
}
override fun onFailure(call: Call<T>, t: Throwable) {
callback.onError(null)
Log.d("Network Manager Failure", t.localizedMessage)
}
})
}
Затем, чтобы получить контекст из своей деятельности, я использую этот метод, который вызывает метод вызова вызова:
fun <T> BaseActivity.callAPI(call: Observable<T>?, onSucceed: (T?) -> Unit, onError: (errorCode: String) -> Unit) {
NetworkManager.instance.performCall(call,
object : NetworkManager.OnRequestCallback<T> {
override fun onSuccess(body: T?) {
onSucceed(body)
}
override fun onError(errorResponseBody: ResponseBody?) {
JSONObject(errorResponseBody?.string()).let {
val errorCode = it.getJSONObject("meta").getString("errorCode")
when (errorCode) {
Errors.DEPRECATED_API_VERSION.name ->
onAppUpdateNeeded()
else -> onError(errorResponseBody)
}
}
}
})
}
Затем BaseActivitt.callApi()
используется в каждом действии, для которого требуется информация API, теперь я использую view models
+ dagger
лучше, но сейчас это то, что у меня есть, и я должен его сохранить.
Может кто-нибудь показать мне, как превратить это в RXJava/Kotlin
вещь?