Я делаю простой список переработчиков с элементами, возвращенными из API. У меня есть мой модифицированный клиент
open class CoinListRetroFit {
val httpLoggingInterceptor = HttpLoggingInterceptor()
val okHttpClient = OkHttpClient.Builder()
.readTimeout(1000, TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.build()
private val retroFit: Retrofit = Retrofit.Builder()
.baseUrl(" https://api.coinmarketcap.com/v2/")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
val coinList: LuckyCoinApiService = retroFit.create(LuckyCoinApiService::class.java)
У меня есть сервис и клиент Api, который делает звонок
interface LuckyCoinApiService {
@GET("listings/")
fun getCoinListing() : Observable<CoinListResponse>
}
class LuckyCoinApiClient : CoinListRetroFit() {
fun getCoins(): Observable<List<CoinListItem>> =
coinList.getCoinListing().map { response ->
response.cryptoList
}
}
Теперь ниже, где я подписываюсь на наблюдаемый и заполняю мой список, однако он возвращает null, и когда я иду на отладку, он падает в классе Client на coinList.getCoinListing
. Мне не дают никакой информации, касающейся сетевых вызовов, для которых я думал, что OkHttpClient Interceptor
. Здесь я подписываюсь на наблюдаемое ...
addDisposable(LuckyCoinApiClient()
.getCoins()
.compose(ObservableTransformer { upstream: Observable<List<CoinListItem>> ->
upstream
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
})
.subscribe({ response ->
list = response
adapter.addItems(list!!)
},
{ _ ->
Log.e("CoinListController", "Error retrieving list!!")
}))
}
fun addDisposable(disposable: Disposable) {
if (compositeDisposable == null) {
compositeDisposable = CompositeDisposable(disposable)
} else {
compositeDisposable!!.add(disposable)
}
}
Должно быть, я что-то неправильно понимаю, как работают эти запросы. А также как правильно настроить перехватчик логирования
EDIT:
После добавления интернет-разрешений и внесения некоторых изменений в моё наблюдаемое и выполнения .setLevel()
на моем перехватчике. Теперь я вижу сетевой вызов в LogCat и получаю ожидаемый ответ 200 OK со списком ..
Однако теперь ответ останавливается на
08-30 15:06:25.446 5214-5238/com.example.luckycoins D/OkHttp: "id": 3238,
08-30 15:06:25.446 5214-5238/com.example.luckycoins D/OkHttp: "name": "ABCC Token",
08-30 15:06:25.446 5214-5238/com.example.luckycoins D/OkHttp: "symbol": "AT",
08-30 15:06:25.446 5214-5238/com.example.luckycoins D/OkHttp: "website_slug": "abcc-token"
08-30 15:06:25.446 5214-5238/com.example.luckycoins D/OkHttp: },
08-30 15:06:25.446 5214-5238/com.example.luckycoins D/OkHttp: {
08-30 15:06:25.446 5214-5238/com.example.luckycoins D/OkHttp: "id": 3239,
останавливается на этом id
без чтения его атрибутов. Также осталось 2-3 элемента списка, которых он не достиг.