package cn.flightfeather.thirdappmodule.common.net
|
|
import cn.flightfeather.thirdappmodule.CommonApplication
|
import com.google.gson.GsonBuilder
|
import io.reactivex.Observable
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.schedulers.Schedulers
|
import okhttp3.Interceptor
|
import okhttp3.OkHttpClient
|
import retrofit2.Response
|
import retrofit2.Retrofit
|
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
|
import retrofit2.converter.gson.GsonConverterFactory
|
import java.util.concurrent.TimeUnit
|
|
/**
|
* @author riku
|
* Date: 2019/7/22
|
* 网络请求
|
*/
|
class RetrofitFactory constructor(val application: CommonApplication) {
|
// 本系统飞羽监管后端接口ip
|
val retrofit: Retrofit = application.retrofit
|
val retrofitImage: Retrofit = application.retrofitImage
|
|
// 飞羽环境系统后端接口ip
|
lateinit var retrofit2: Retrofit
|
|
init {
|
retrofit2 = newRetrofit(application.ROOT_URL_RELEASE_2)
|
}
|
|
private fun newOkHttpClient(list: List<Interceptor>): OkHttpClient =
|
OkHttpClient.Builder()
|
.connectTimeout(20 * 1000L, TimeUnit.MILLISECONDS)
|
.apply {
|
list.forEach {
|
addInterceptor(it)
|
}
|
}
|
.build()
|
|
private fun newRetrofit(url: String, mOkHttpClient: OkHttpClient? = null): Retrofit =
|
Retrofit.Builder()
|
.baseUrl(url)
|
.addConverterFactory(
|
GsonConverterFactory.create(
|
GsonBuilder()
|
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
|
.create()
|
)
|
)
|
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
.apply { mOkHttpClient?.let { client(it) } }
|
.build()
|
|
companion object {
|
|
@Volatile
|
lateinit var instance: RetrofitFactory
|
|
@JvmStatic
|
@Synchronized
|
fun init(application: CommonApplication) {
|
instance = RetrofitFactory(application)
|
}
|
|
/**
|
* 执行请求返回结果
|
*/
|
fun <T> executeResult(observable: Observable<Response<T>>, subscriber: ResultObserver<T>) {
|
observable.subscribeOn(Schedulers.io())
|
.observeOn(AndroidSchedulers.mainThread())
|
.subscribe(subscriber)
|
}
|
|
fun withProgressListeningRetrofit(listener: NetWorkProgressListener?): Retrofit {
|
return if (listener == null) {
|
instance.retrofit
|
} else {
|
val c = instance.newOkHttpClient(listOf(NetWorkProgressInterceptor(listener)))
|
instance.newRetrofit(instance.application.ROOT_URL_RELEASE, c)
|
}
|
}
|
}
|
}
|