У меня проблема с 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) })