Retrofit + RxJava Не делает запрос API - PullRequest
0 голосов
/ 22 сентября 2019

У меня проблема с Retrofit и RxJava2 в Kotlin.

Вот мой build.gradle:

// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.1' implementation 'com.squareup.retrofit2:converter-moshi:2.6.1'
implementation 'com.squareup.okhttp3:okhttp:4.2.0'
implementation 'com.squareup.moshi:moshi-kotlin:1.8.0'

// RxJava
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.11'

У меня есть следующий интерфейс Retrofit с одним запросом, login,У меня также есть простой data class, называемый User.

data class User (
    private val firstName: String
)

interface ApiService {
    @POST("auth/login")
    fun login(@Body body: String) : Observable<User>
}

Когда я пытаюсь сделать запрос и подписаться на него, запрос не отправляется.Я проверил журналы своего сервера, и сервер вообще ничего не получает.Также нет ошибок в журналах приложения.Я не уверен, что я делаю неправильно, так как я просмотрел много статей / учебных пособий, и все они сказали, что делают это таким образом.

val client = Retrofit.Builder()
    .baseUrl("https://example.com/api/")
    .addCallAdapterFactory(RxJava2CallAdapaterFactory.create())
    .build()
    .create(ApiService::class.java)

client.login(JSONObject().put("email", ...).toString())
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe()

Может ли кто-нибудь объяснить мне, что я на самом деле делаюнеправильно?

Редактировать:

Я попробовал следующий код, и я все еще получаю тот же результат.Нет запроса.

val okHttpClient = OkHttpClient.Builder().addInterceptor(
    HttpLoggingInterceptor(HttpLoggingInterceptor.Logger.DEFAULT)
).build()

val client = Retrofit.Builder()
    .baseUrl("https://example.com/api/")
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
    .client(okHttpClient)
    .build()
    .create(ApiClient::class.java)

client.login(JSONObject().put("email", ...).toString())
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ user -> println(user) }, { error -> println(error) })

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Вам не хватает добавить конвертер Moshi в ваш экземпляр для модернизации.

.addConverterFactory(MoshiConverterFactory.create())
0 голосов
/ 22 сентября 2019

Вы должны добавить перехватчик регистрации, чтобы просмотреть журналы.

val httpClient = OkHttpClient.Builder()
            .addInterceptor(loggingInterceptor)
            .build()

val builder = Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(RxJava2CallAdapaterFactory.create())  

val apiService = builder.client(httpClient).build().create(ApiService::class.java)

Я предполагаю, что вы добавляете разрешение ИНТЕРНЕТА для AndroidManifest.xml

Как подсказывает @sonnet, вы должны добавить обратные вызовы кваши запросы

apiService.login(JSONObject().put("email", ...).toString())
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ user -> ... }, { error -> ... })
...