попробовал несколькими способами, которые все еще сталкиваются с этой проблемой, как
Я использую RxJava и Retrofit для выполнения всех своих сетевых операций. Ниже мой код.
<-- HTTP FAILED: java.net.SocketException: Socket closed
Service.kt
@GET("/v1/contact/{id}")
fun getContactDetails(@Path("id") id:String): Flowable<ContactDetailResponse>
AccountRepositoryImpl.kt
override fun contactDetails(contactId:String) {
mContactResponse.loading(true)
remote.getContactDetails(contactId)
.performOnBackOutOnMain(scheduler)
.subscribe({
data -> mContactResponse.success(data)
},{
error -> mContactResponse.failed(error)
})
.addTo(compositeDisposable)
}
Extensions.kt
fun <T> Flowable<T>.performOnBackOutOnMain(scheduler: Scheduler):
Flowable<T> {
return this.subscribeOn(scheduler.io())
.observeOn(scheduler.mainThread())
}
NetworkModule.kt
@Module
class NetworkModule(val key: String, val secret: String) {
@Provides
@Singleton
fun providesRetrofit(jacksonConverterFactory: JacksonConverterFactory,
rxJava2CallAdapterFactory:
RxJava2CallAdapterFactory,
okHttpClient: OkHttpClient,
baseUrl: String): Retrofit {
return Retrofit.Builder().baseUrl(baseUrl)
.addConverterFactory(jacksonConverterFactory)
.addCallAdapterFactory(rxJava2CallAdapterFactory)
.client(okHttpClient)
.build()
}
@Provides
@Singleton
fun providesOkHttpClient(cache: Cache, httpInterceptor:
HttpLoggingInterceptor): OkHttpClient {
val client = OkHttpClient.Builder()
.cache(cache)
.addInterceptor(httpInterceptor)
.retryOnConnectionFailure(true)
.connectTimeout(100, TimeUnit.SECONDS)
.writeTimeout(100, TimeUnit.SECONDS)
.readTimeout(100, TimeUnit.SECONDS)
return client.build()
}
}
@Christopher Уже дано разрешение
Хорошо, думаю, нам нужно более подробное описание ошибки. SocketException имеет несколько причин. Работает ли один и тот же HTTP-запрос с другим инструментом, например Почтальон? Чтобы убедиться, что причина не в вашем сервере.
да, получаю ответ от почтальона, но я не согласен
Я также проверил эту ссылку, но не получил, где это сделать: stackoverflow.com/questions/40823134/…
yes getting response on postman На вашем ПК? Используйте браузер на вашем устройстве.
Вы случайно не утилизируете compositeDisposable?
можешь показать мне свой baseUrl?
Вы можете создать свой клиент OkHttp, как показано ниже, я столкнулся с исключением закрытого сокета в низкой сети после добавления следующего, как в случае с OkhttpClient, resloved
connectionPool (ConnectionPool (0, 1, TimeUnit.NANOSECONDS))
протоколы (listOf (Protocol.HTTP_1_1))
OkHttpClient.Builder().apply {
.connectionPool(ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
.protocols(listOf(Protocol.HTTP_1_1))
connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
retryOnConnectionFailure(false)
}.build()
Разрешение ИНТЕРНЕТ установлено в манифесте?