【发布时间】:2018-06-07 10:47:01
【问题描述】:
尝试了多种方法仍然面临这个问题
我正在使用 RxJava 和 Retrofit 来完成我所有的网络操作。下面是我的代码。
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()
}
}
【问题讨论】:
-
在 Manifest 中设置了 INTERNET 权限?
-
@Christopher 已获得许可
-
好的,我想我们需要更详细的错误描述。 SocketException 有几个原因。相同的 HTTP 请求是否适用于不同的工具,例如邮差?确保原因不是您的后端。
-
是的,得到邮递员的回复,但我对此表示不满。
-
你有没有机会处置
compositeDisposable?
标签: android retrofit2 rx-java2