App crashes on java.net.SocketTimeoutException: timeout (Kotlin, Retrofit)












0















App crashes on this line if response won't come.



chain.proceed(requestBuilder.build())


Here is my class for RetrofitClient



class RetrofitClient {

private val apiService: ApiServiceInterface

init {
val builder = Retrofit.Builder()
builder.baseUrl(RequestParameters.BASE_URL)
builder.addConverterFactory(GsonConverterFactory.create())
builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//added for adapter
builder.client(getClient())
val retrofit = builder.build()
apiService = retrofit.create(ApiServiceInterface::class.java)
}

companion object {
private var clientInstance: RetrofitClient? = null
lateinit var context: Context

fun getInstance(): RetrofitClient {
if (clientInstance == null) {
clientInstance = RetrofitClient()
}
return clientInstance as RetrofitClient
}
}

fun getApiInterface(): ApiServiceInterface {
return apiService
}

private fun getClient(): OkHttpClient {

val httpClient = OkHttpClient.Builder()
httpClient.readTimeout(25, TimeUnit.SECONDS)
httpClient.connectTimeout(25, TimeUnit.SECONDS)

httpClient.addInterceptor { chain ->
val original = chain.request()

val requestBuilder = original.newBuilder()
.header(RequestParameters.X_API, RequestParameters.H_XAPI_KEY)
.method(original.method(), original.body())

chain.proceed(requestBuilder.build())
}

// set your desired log level
val logging = HttpLoggingInterceptor()
logging.level = HttpLoggingInterceptor.Level.HEADERS
logging.level = HttpLoggingInterceptor.Level.BODY
httpClient.addInterceptor(logging)

return httpClient.build()
}
}


Here is the error in log:



1542609097.397 26572-26572/com.app.mylife W/System.err: java.net.SocketTimeoutException: timeout
1542609097.397 26572-26572/com.app.mylife W/System.err: at okio.Okio$4.newTimeoutException(Okio.java:230)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:285)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:241)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.RealBufferedSource.indexOf(RealBufferedSource.java:345)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:217)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:212)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:212)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
1542609097.398 26572-26572/com.app.mylife W/System.err: at com.app.mylife.retrofit.RetrofitClient$getClient$1.intercept(RetrofitClient.kt:64)
1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.RealCall.execute(RealCall.java:77)
1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41)
1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Observable.subscribe(Observable.java:10179)
1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Observable.subscribe(Observable.java:10179)
1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$1.run(ObservableSubscribeOn.java:39)
1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Scheduler$1.run(Scheduler.java:134)
1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:59)
1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:51)
1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
1542609097.399 26572-26572/com.app.mylife W/System.err: at java.lang.Thread.run(Thread.java:764)
1542609097.399 26572-26572/com.app.mylife W/System.err: Caused by: java.net.SocketException: Socket closed
1542609097.399 26572-26572/com.app.mylife W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:203)
1542609097.399 26572-26572/com.app.mylife W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:139)
1542609097.399 26572-26572/com.app.mylife W/System.err: at okio.Okio$2.read(Okio.java:139)
1542609097.399 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
1542609097.400 26572-26572/com.app.mylife W/System.err: ... 39 more









share|improve this question





























    0















    App crashes on this line if response won't come.



    chain.proceed(requestBuilder.build())


    Here is my class for RetrofitClient



    class RetrofitClient {

    private val apiService: ApiServiceInterface

    init {
    val builder = Retrofit.Builder()
    builder.baseUrl(RequestParameters.BASE_URL)
    builder.addConverterFactory(GsonConverterFactory.create())
    builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//added for adapter
    builder.client(getClient())
    val retrofit = builder.build()
    apiService = retrofit.create(ApiServiceInterface::class.java)
    }

    companion object {
    private var clientInstance: RetrofitClient? = null
    lateinit var context: Context

    fun getInstance(): RetrofitClient {
    if (clientInstance == null) {
    clientInstance = RetrofitClient()
    }
    return clientInstance as RetrofitClient
    }
    }

    fun getApiInterface(): ApiServiceInterface {
    return apiService
    }

    private fun getClient(): OkHttpClient {

    val httpClient = OkHttpClient.Builder()
    httpClient.readTimeout(25, TimeUnit.SECONDS)
    httpClient.connectTimeout(25, TimeUnit.SECONDS)

    httpClient.addInterceptor { chain ->
    val original = chain.request()

    val requestBuilder = original.newBuilder()
    .header(RequestParameters.X_API, RequestParameters.H_XAPI_KEY)
    .method(original.method(), original.body())

    chain.proceed(requestBuilder.build())
    }

    // set your desired log level
    val logging = HttpLoggingInterceptor()
    logging.level = HttpLoggingInterceptor.Level.HEADERS
    logging.level = HttpLoggingInterceptor.Level.BODY
    httpClient.addInterceptor(logging)

    return httpClient.build()
    }
    }


    Here is the error in log:



    1542609097.397 26572-26572/com.app.mylife W/System.err: java.net.SocketTimeoutException: timeout
    1542609097.397 26572-26572/com.app.mylife W/System.err: at okio.Okio$4.newTimeoutException(Okio.java:230)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:285)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:241)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.RealBufferedSource.indexOf(RealBufferedSource.java:345)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:217)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:212)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:212)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    1542609097.398 26572-26572/com.app.mylife W/System.err: at com.app.mylife.retrofit.RetrofitClient$getClient$1.intercept(RetrofitClient.kt:64)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.RealCall.execute(RealCall.java:77)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Observable.subscribe(Observable.java:10179)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Observable.subscribe(Observable.java:10179)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$1.run(ObservableSubscribeOn.java:39)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Scheduler$1.run(Scheduler.java:134)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:59)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:51)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at java.lang.Thread.run(Thread.java:764)
    1542609097.399 26572-26572/com.app.mylife W/System.err: Caused by: java.net.SocketException: Socket closed
    1542609097.399 26572-26572/com.app.mylife W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:203)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:139)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at okio.Okio$2.read(Okio.java:139)
    1542609097.399 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
    1542609097.400 26572-26572/com.app.mylife W/System.err: ... 39 more









    share|improve this question



























      0












      0








      0








      App crashes on this line if response won't come.



      chain.proceed(requestBuilder.build())


      Here is my class for RetrofitClient



      class RetrofitClient {

      private val apiService: ApiServiceInterface

      init {
      val builder = Retrofit.Builder()
      builder.baseUrl(RequestParameters.BASE_URL)
      builder.addConverterFactory(GsonConverterFactory.create())
      builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//added for adapter
      builder.client(getClient())
      val retrofit = builder.build()
      apiService = retrofit.create(ApiServiceInterface::class.java)
      }

      companion object {
      private var clientInstance: RetrofitClient? = null
      lateinit var context: Context

      fun getInstance(): RetrofitClient {
      if (clientInstance == null) {
      clientInstance = RetrofitClient()
      }
      return clientInstance as RetrofitClient
      }
      }

      fun getApiInterface(): ApiServiceInterface {
      return apiService
      }

      private fun getClient(): OkHttpClient {

      val httpClient = OkHttpClient.Builder()
      httpClient.readTimeout(25, TimeUnit.SECONDS)
      httpClient.connectTimeout(25, TimeUnit.SECONDS)

      httpClient.addInterceptor { chain ->
      val original = chain.request()

      val requestBuilder = original.newBuilder()
      .header(RequestParameters.X_API, RequestParameters.H_XAPI_KEY)
      .method(original.method(), original.body())

      chain.proceed(requestBuilder.build())
      }

      // set your desired log level
      val logging = HttpLoggingInterceptor()
      logging.level = HttpLoggingInterceptor.Level.HEADERS
      logging.level = HttpLoggingInterceptor.Level.BODY
      httpClient.addInterceptor(logging)

      return httpClient.build()
      }
      }


      Here is the error in log:



      1542609097.397 26572-26572/com.app.mylife W/System.err: java.net.SocketTimeoutException: timeout
      1542609097.397 26572-26572/com.app.mylife W/System.err: at okio.Okio$4.newTimeoutException(Okio.java:230)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:285)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:241)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.RealBufferedSource.indexOf(RealBufferedSource.java:345)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:217)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:212)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:212)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at com.app.mylife.retrofit.RetrofitClient$getClient$1.intercept(RetrofitClient.kt:64)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.RealCall.execute(RealCall.java:77)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Observable.subscribe(Observable.java:10179)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Observable.subscribe(Observable.java:10179)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$1.run(ObservableSubscribeOn.java:39)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Scheduler$1.run(Scheduler.java:134)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:59)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:51)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.lang.Thread.run(Thread.java:764)
      1542609097.399 26572-26572/com.app.mylife W/System.err: Caused by: java.net.SocketException: Socket closed
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:203)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:139)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okio.Okio$2.read(Okio.java:139)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
      1542609097.400 26572-26572/com.app.mylife W/System.err: ... 39 more









      share|improve this question
















      App crashes on this line if response won't come.



      chain.proceed(requestBuilder.build())


      Here is my class for RetrofitClient



      class RetrofitClient {

      private val apiService: ApiServiceInterface

      init {
      val builder = Retrofit.Builder()
      builder.baseUrl(RequestParameters.BASE_URL)
      builder.addConverterFactory(GsonConverterFactory.create())
      builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//added for adapter
      builder.client(getClient())
      val retrofit = builder.build()
      apiService = retrofit.create(ApiServiceInterface::class.java)
      }

      companion object {
      private var clientInstance: RetrofitClient? = null
      lateinit var context: Context

      fun getInstance(): RetrofitClient {
      if (clientInstance == null) {
      clientInstance = RetrofitClient()
      }
      return clientInstance as RetrofitClient
      }
      }

      fun getApiInterface(): ApiServiceInterface {
      return apiService
      }

      private fun getClient(): OkHttpClient {

      val httpClient = OkHttpClient.Builder()
      httpClient.readTimeout(25, TimeUnit.SECONDS)
      httpClient.connectTimeout(25, TimeUnit.SECONDS)

      httpClient.addInterceptor { chain ->
      val original = chain.request()

      val requestBuilder = original.newBuilder()
      .header(RequestParameters.X_API, RequestParameters.H_XAPI_KEY)
      .method(original.method(), original.body())

      chain.proceed(requestBuilder.build())
      }

      // set your desired log level
      val logging = HttpLoggingInterceptor()
      logging.level = HttpLoggingInterceptor.Level.HEADERS
      logging.level = HttpLoggingInterceptor.Level.BODY
      httpClient.addInterceptor(logging)

      return httpClient.build()
      }
      }


      Here is the error in log:



      1542609097.397 26572-26572/com.app.mylife W/System.err: java.net.SocketTimeoutException: timeout
      1542609097.397 26572-26572/com.app.mylife W/System.err: at okio.Okio$4.newTimeoutException(Okio.java:230)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:285)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:241)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.RealBufferedSource.indexOf(RealBufferedSource.java:345)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:217)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:212)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:212)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.398 26572-26572/com.app.mylife W/System.err: at com.app.mylife.retrofit.RetrofitClient$getClient$1.intercept(RetrofitClient.kt:64)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okhttp3.RealCall.execute(RealCall.java:77)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Observable.subscribe(Observable.java:10179)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Observable.subscribe(Observable.java:10179)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$1.run(ObservableSubscribeOn.java:39)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.Scheduler$1.run(Scheduler.java:134)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:59)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:51)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.lang.Thread.run(Thread.java:764)
      1542609097.399 26572-26572/com.app.mylife W/System.err: Caused by: java.net.SocketException: Socket closed
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:203)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at java.net.SocketInputStream.read(SocketInputStream.java:139)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okio.Okio$2.read(Okio.java:139)
      1542609097.399 26572-26572/com.app.mylife W/System.err: at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
      1542609097.400 26572-26572/com.app.mylife W/System.err: ... 39 more






      android kotlin rx-java httpclient retrofit2






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 19 '18 at 6:56









      Rohit5k2

      14.2k42551




      14.2k42551










      asked Nov 19 '18 at 6:38









      KishanSolanki124KishanSolanki124

      1,7791121




      1,7791121
























          2 Answers
          2






          active

          oldest

          votes


















          0














          Try this code way..
          make retrofit object creation part.



          class ApiClient {

          companion object {
          val BASE_URL = "https://simplifiedcoding.net/demos/"
          var retrofit: Retrofit? = null
          fun getClient(): Retrofit? {
          if (retrofit == null) {
          val interceptor = HttpLoggingInterceptor()
          interceptor.level = HttpLoggingInterceptor.Level.BODY
          val client = OkHttpClient.Builder().apply {
          readTimeout(20, TimeUnit.SECONDS)
          writeTimeout(20, TimeUnit.SECONDS)
          connectTimeout(20, TimeUnit.SECONDS)
          addInterceptor(interceptor)
          addInterceptor { chain ->
          var request = chain.request()
          request = request.newBuilder()
          .build()
          val response = chain.proceed(request)
          response
          }
          }
          retrofit = Retrofit.Builder()
          .baseUrl(BASE_URL)
          .client(client.build())

          .addConverterFactory(GsonConverterFactory.create())
          .build()

          }

          return retrofit
          }
          }


          }



          make interface for api calling..



          interface ApiInterface {
          @GET("marvel")
          fun getData(): Call<List<Hero>>


          }



          In activity or fragment called api like this way i hope you create response pojo class



          var apiInterface: ApiInterface = ApiClient.getClient()!!.create(ApiInterface::class.java)
          var hero: Call<List<Hero>>
          hero = apiInterface.getData()
          hero.enqueue(object : Callback<List<Hero>> {
          override fun onFailure(call: Call<List<Hero>>?, t: Throwable?) {
          closeDialog(dialog)
          Toast.makeText(mContext, t?.message, Toast.LENGTH_SHORT).show()
          Log.d("Error:::",t?.message)
          }

          override fun onResponse(call: Call<List<Hero>>?, response: Response<List<Hero>>?) {
          mHeroDataList.clear()
          if (response != null && response.isSuccessful && response.body() != null) {
          closeDialog(dialog)
          mHeroDataList .addAll(response.body()!!)
          setAdapter(mHeroDataList)
          }
          }

          })





          share|improve this answer
























          • This doesn't help because its the same code as I do.

            – KishanSolanki124
            Nov 19 '18 at 8:26











          • increase time out value.

            – Android Team
            Nov 19 '18 at 8:27











          • Actually, the problem is app crashes if response won't come until timeout seconds. How could we handle this? My concern is app should not crash if response won't come(whether it is 30 secs or 60 secs). Increasing timeout value is not an ideal solution.

            – KishanSolanki124
            Nov 19 '18 at 8:47



















          0














          To fix this issue you need to be sure to check network connectivity on the device and be sure you have an active internet connection before making the network call.
          methods to check internet connectivity before making network requests
          You can use connectivity manager as such



          fun isOnline(): Boolean {
          val cm =
          getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
          val netInfo = cm.getActiveNetworkInfo()
          return netInfo != null && netInfo.isConnectedOrConnecting()
          }


          this was culled from this answer which allows you check network availability.
          If you want to monitor more accurately whether your network is active or not you can try pinging Google DNS servers with the answer here Checking network on Android.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53369481%2fapp-crashes-on-java-net-sockettimeoutexception-timeout-kotlin-retrofit%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Try this code way..
            make retrofit object creation part.



            class ApiClient {

            companion object {
            val BASE_URL = "https://simplifiedcoding.net/demos/"
            var retrofit: Retrofit? = null
            fun getClient(): Retrofit? {
            if (retrofit == null) {
            val interceptor = HttpLoggingInterceptor()
            interceptor.level = HttpLoggingInterceptor.Level.BODY
            val client = OkHttpClient.Builder().apply {
            readTimeout(20, TimeUnit.SECONDS)
            writeTimeout(20, TimeUnit.SECONDS)
            connectTimeout(20, TimeUnit.SECONDS)
            addInterceptor(interceptor)
            addInterceptor { chain ->
            var request = chain.request()
            request = request.newBuilder()
            .build()
            val response = chain.proceed(request)
            response
            }
            }
            retrofit = Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(client.build())

            .addConverterFactory(GsonConverterFactory.create())
            .build()

            }

            return retrofit
            }
            }


            }



            make interface for api calling..



            interface ApiInterface {
            @GET("marvel")
            fun getData(): Call<List<Hero>>


            }



            In activity or fragment called api like this way i hope you create response pojo class



            var apiInterface: ApiInterface = ApiClient.getClient()!!.create(ApiInterface::class.java)
            var hero: Call<List<Hero>>
            hero = apiInterface.getData()
            hero.enqueue(object : Callback<List<Hero>> {
            override fun onFailure(call: Call<List<Hero>>?, t: Throwable?) {
            closeDialog(dialog)
            Toast.makeText(mContext, t?.message, Toast.LENGTH_SHORT).show()
            Log.d("Error:::",t?.message)
            }

            override fun onResponse(call: Call<List<Hero>>?, response: Response<List<Hero>>?) {
            mHeroDataList.clear()
            if (response != null && response.isSuccessful && response.body() != null) {
            closeDialog(dialog)
            mHeroDataList .addAll(response.body()!!)
            setAdapter(mHeroDataList)
            }
            }

            })





            share|improve this answer
























            • This doesn't help because its the same code as I do.

              – KishanSolanki124
              Nov 19 '18 at 8:26











            • increase time out value.

              – Android Team
              Nov 19 '18 at 8:27











            • Actually, the problem is app crashes if response won't come until timeout seconds. How could we handle this? My concern is app should not crash if response won't come(whether it is 30 secs or 60 secs). Increasing timeout value is not an ideal solution.

              – KishanSolanki124
              Nov 19 '18 at 8:47
















            0














            Try this code way..
            make retrofit object creation part.



            class ApiClient {

            companion object {
            val BASE_URL = "https://simplifiedcoding.net/demos/"
            var retrofit: Retrofit? = null
            fun getClient(): Retrofit? {
            if (retrofit == null) {
            val interceptor = HttpLoggingInterceptor()
            interceptor.level = HttpLoggingInterceptor.Level.BODY
            val client = OkHttpClient.Builder().apply {
            readTimeout(20, TimeUnit.SECONDS)
            writeTimeout(20, TimeUnit.SECONDS)
            connectTimeout(20, TimeUnit.SECONDS)
            addInterceptor(interceptor)
            addInterceptor { chain ->
            var request = chain.request()
            request = request.newBuilder()
            .build()
            val response = chain.proceed(request)
            response
            }
            }
            retrofit = Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(client.build())

            .addConverterFactory(GsonConverterFactory.create())
            .build()

            }

            return retrofit
            }
            }


            }



            make interface for api calling..



            interface ApiInterface {
            @GET("marvel")
            fun getData(): Call<List<Hero>>


            }



            In activity or fragment called api like this way i hope you create response pojo class



            var apiInterface: ApiInterface = ApiClient.getClient()!!.create(ApiInterface::class.java)
            var hero: Call<List<Hero>>
            hero = apiInterface.getData()
            hero.enqueue(object : Callback<List<Hero>> {
            override fun onFailure(call: Call<List<Hero>>?, t: Throwable?) {
            closeDialog(dialog)
            Toast.makeText(mContext, t?.message, Toast.LENGTH_SHORT).show()
            Log.d("Error:::",t?.message)
            }

            override fun onResponse(call: Call<List<Hero>>?, response: Response<List<Hero>>?) {
            mHeroDataList.clear()
            if (response != null && response.isSuccessful && response.body() != null) {
            closeDialog(dialog)
            mHeroDataList .addAll(response.body()!!)
            setAdapter(mHeroDataList)
            }
            }

            })





            share|improve this answer
























            • This doesn't help because its the same code as I do.

              – KishanSolanki124
              Nov 19 '18 at 8:26











            • increase time out value.

              – Android Team
              Nov 19 '18 at 8:27











            • Actually, the problem is app crashes if response won't come until timeout seconds. How could we handle this? My concern is app should not crash if response won't come(whether it is 30 secs or 60 secs). Increasing timeout value is not an ideal solution.

              – KishanSolanki124
              Nov 19 '18 at 8:47














            0












            0








            0







            Try this code way..
            make retrofit object creation part.



            class ApiClient {

            companion object {
            val BASE_URL = "https://simplifiedcoding.net/demos/"
            var retrofit: Retrofit? = null
            fun getClient(): Retrofit? {
            if (retrofit == null) {
            val interceptor = HttpLoggingInterceptor()
            interceptor.level = HttpLoggingInterceptor.Level.BODY
            val client = OkHttpClient.Builder().apply {
            readTimeout(20, TimeUnit.SECONDS)
            writeTimeout(20, TimeUnit.SECONDS)
            connectTimeout(20, TimeUnit.SECONDS)
            addInterceptor(interceptor)
            addInterceptor { chain ->
            var request = chain.request()
            request = request.newBuilder()
            .build()
            val response = chain.proceed(request)
            response
            }
            }
            retrofit = Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(client.build())

            .addConverterFactory(GsonConverterFactory.create())
            .build()

            }

            return retrofit
            }
            }


            }



            make interface for api calling..



            interface ApiInterface {
            @GET("marvel")
            fun getData(): Call<List<Hero>>


            }



            In activity or fragment called api like this way i hope you create response pojo class



            var apiInterface: ApiInterface = ApiClient.getClient()!!.create(ApiInterface::class.java)
            var hero: Call<List<Hero>>
            hero = apiInterface.getData()
            hero.enqueue(object : Callback<List<Hero>> {
            override fun onFailure(call: Call<List<Hero>>?, t: Throwable?) {
            closeDialog(dialog)
            Toast.makeText(mContext, t?.message, Toast.LENGTH_SHORT).show()
            Log.d("Error:::",t?.message)
            }

            override fun onResponse(call: Call<List<Hero>>?, response: Response<List<Hero>>?) {
            mHeroDataList.clear()
            if (response != null && response.isSuccessful && response.body() != null) {
            closeDialog(dialog)
            mHeroDataList .addAll(response.body()!!)
            setAdapter(mHeroDataList)
            }
            }

            })





            share|improve this answer













            Try this code way..
            make retrofit object creation part.



            class ApiClient {

            companion object {
            val BASE_URL = "https://simplifiedcoding.net/demos/"
            var retrofit: Retrofit? = null
            fun getClient(): Retrofit? {
            if (retrofit == null) {
            val interceptor = HttpLoggingInterceptor()
            interceptor.level = HttpLoggingInterceptor.Level.BODY
            val client = OkHttpClient.Builder().apply {
            readTimeout(20, TimeUnit.SECONDS)
            writeTimeout(20, TimeUnit.SECONDS)
            connectTimeout(20, TimeUnit.SECONDS)
            addInterceptor(interceptor)
            addInterceptor { chain ->
            var request = chain.request()
            request = request.newBuilder()
            .build()
            val response = chain.proceed(request)
            response
            }
            }
            retrofit = Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(client.build())

            .addConverterFactory(GsonConverterFactory.create())
            .build()

            }

            return retrofit
            }
            }


            }



            make interface for api calling..



            interface ApiInterface {
            @GET("marvel")
            fun getData(): Call<List<Hero>>


            }



            In activity or fragment called api like this way i hope you create response pojo class



            var apiInterface: ApiInterface = ApiClient.getClient()!!.create(ApiInterface::class.java)
            var hero: Call<List<Hero>>
            hero = apiInterface.getData()
            hero.enqueue(object : Callback<List<Hero>> {
            override fun onFailure(call: Call<List<Hero>>?, t: Throwable?) {
            closeDialog(dialog)
            Toast.makeText(mContext, t?.message, Toast.LENGTH_SHORT).show()
            Log.d("Error:::",t?.message)
            }

            override fun onResponse(call: Call<List<Hero>>?, response: Response<List<Hero>>?) {
            mHeroDataList.clear()
            if (response != null && response.isSuccessful && response.body() != null) {
            closeDialog(dialog)
            mHeroDataList .addAll(response.body()!!)
            setAdapter(mHeroDataList)
            }
            }

            })






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 19 '18 at 6:50









            Android TeamAndroid Team

            7,56011133




            7,56011133













            • This doesn't help because its the same code as I do.

              – KishanSolanki124
              Nov 19 '18 at 8:26











            • increase time out value.

              – Android Team
              Nov 19 '18 at 8:27











            • Actually, the problem is app crashes if response won't come until timeout seconds. How could we handle this? My concern is app should not crash if response won't come(whether it is 30 secs or 60 secs). Increasing timeout value is not an ideal solution.

              – KishanSolanki124
              Nov 19 '18 at 8:47



















            • This doesn't help because its the same code as I do.

              – KishanSolanki124
              Nov 19 '18 at 8:26











            • increase time out value.

              – Android Team
              Nov 19 '18 at 8:27











            • Actually, the problem is app crashes if response won't come until timeout seconds. How could we handle this? My concern is app should not crash if response won't come(whether it is 30 secs or 60 secs). Increasing timeout value is not an ideal solution.

              – KishanSolanki124
              Nov 19 '18 at 8:47

















            This doesn't help because its the same code as I do.

            – KishanSolanki124
            Nov 19 '18 at 8:26





            This doesn't help because its the same code as I do.

            – KishanSolanki124
            Nov 19 '18 at 8:26













            increase time out value.

            – Android Team
            Nov 19 '18 at 8:27





            increase time out value.

            – Android Team
            Nov 19 '18 at 8:27













            Actually, the problem is app crashes if response won't come until timeout seconds. How could we handle this? My concern is app should not crash if response won't come(whether it is 30 secs or 60 secs). Increasing timeout value is not an ideal solution.

            – KishanSolanki124
            Nov 19 '18 at 8:47





            Actually, the problem is app crashes if response won't come until timeout seconds. How could we handle this? My concern is app should not crash if response won't come(whether it is 30 secs or 60 secs). Increasing timeout value is not an ideal solution.

            – KishanSolanki124
            Nov 19 '18 at 8:47













            0














            To fix this issue you need to be sure to check network connectivity on the device and be sure you have an active internet connection before making the network call.
            methods to check internet connectivity before making network requests
            You can use connectivity manager as such



            fun isOnline(): Boolean {
            val cm =
            getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            val netInfo = cm.getActiveNetworkInfo()
            return netInfo != null && netInfo.isConnectedOrConnecting()
            }


            this was culled from this answer which allows you check network availability.
            If you want to monitor more accurately whether your network is active or not you can try pinging Google DNS servers with the answer here Checking network on Android.






            share|improve this answer




























              0














              To fix this issue you need to be sure to check network connectivity on the device and be sure you have an active internet connection before making the network call.
              methods to check internet connectivity before making network requests
              You can use connectivity manager as such



              fun isOnline(): Boolean {
              val cm =
              getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
              val netInfo = cm.getActiveNetworkInfo()
              return netInfo != null && netInfo.isConnectedOrConnecting()
              }


              this was culled from this answer which allows you check network availability.
              If you want to monitor more accurately whether your network is active or not you can try pinging Google DNS servers with the answer here Checking network on Android.






              share|improve this answer


























                0












                0








                0







                To fix this issue you need to be sure to check network connectivity on the device and be sure you have an active internet connection before making the network call.
                methods to check internet connectivity before making network requests
                You can use connectivity manager as such



                fun isOnline(): Boolean {
                val cm =
                getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
                val netInfo = cm.getActiveNetworkInfo()
                return netInfo != null && netInfo.isConnectedOrConnecting()
                }


                this was culled from this answer which allows you check network availability.
                If you want to monitor more accurately whether your network is active or not you can try pinging Google DNS servers with the answer here Checking network on Android.






                share|improve this answer













                To fix this issue you need to be sure to check network connectivity on the device and be sure you have an active internet connection before making the network call.
                methods to check internet connectivity before making network requests
                You can use connectivity manager as such



                fun isOnline(): Boolean {
                val cm =
                getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
                val netInfo = cm.getActiveNetworkInfo()
                return netInfo != null && netInfo.isConnectedOrConnecting()
                }


                this was culled from this answer which allows you check network availability.
                If you want to monitor more accurately whether your network is active or not you can try pinging Google DNS servers with the answer here Checking network on Android.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 20 '18 at 22:59









                Abdulrahman AbdulkarimAbdulrahman Abdulkarim

                4319




                4319






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53369481%2fapp-crashes-on-java-net-sockettimeoutexception-timeout-kotlin-retrofit%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    How to pass form data using jquery Ajax to insert data in database?

                    National Museum of Racing and Hall of Fame

                    Guess what letter conforming each word