HTTP FAILED: java.net.SocketException: Socket closed Retrofit

попробовал несколькими способами, которые все еще сталкиваются с этой проблемой, как

Я использую 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 07.06.2018 12:52

@Christopher Уже дано разрешение

Harshad07 07.06.2018 12:53

Хорошо, думаю, нам нужно более подробное описание ошибки. SocketException имеет несколько причин. Работает ли один и тот же HTTP-запрос с другим инструментом, например Почтальон? Чтобы убедиться, что причина не в вашем сервере.

Christopher 07.06.2018 13:01

да, получаю ответ от почтальона, но я не согласен

Harshad07 07.06.2018 13:04

Я также проверил эту ссылку, но не получил, где это сделать: stackoverflow.com/questions/40823134/…

Harshad07 07.06.2018 13:05
yes getting response on postman На вашем ПК? Используйте браузер на вашем устройстве.
greenapps 07.06.2018 13:56

Вы случайно не утилизируете compositeDisposable?

akarnokd 07.06.2018 15:51

можешь показать мне свой baseUrl?

Keshav Aggarwal 07.06.2018 20:57
0
8
2 747
1

Ответы 1

Вы можете создать свой клиент 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()

Другие вопросы по теме