package com.dayu.general.net
|
|
import android.content.Context
|
import android.text.TextUtils
|
import com.dayu.baselibrary.business.BusinessProvider
|
import com.dayu.baselibrary.net.subscribers.BaseProgressSubscriber
|
import com.dayu.baselibrary.net.subscribers.SubscriberListener
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.functions.Function
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
|
/**
|
* Description:
|
* Author: zuo
|
* Date: 2025-03-06
|
*/
|
class ApiManager {
|
|
var apiService: ApiService? = null
|
|
fun init() {
|
if (apiManager == null) {
|
apiManager =
|
com.dayu.qiheonlinelibrary.net.ApiManager()
|
}
|
}
|
|
fun ApiManager() {
|
apiService = RetrofitClient.getInstance().getApiService()
|
}
|
|
fun getInstance(): com.dayu.qiheonlinelibrary.net.ApiManager {
|
return apiManager
|
}
|
|
|
fun <T> requestPostLoading(
|
context: Context?,
|
path: String?,
|
tClass: Class<T>?,
|
params: Map<String?, Any?>?,
|
listener: SubscriberListener<*>?
|
) {
|
request(context, false, path, false, tClass, params, listener)
|
}
|
|
fun <T> requestPostHideLoading(
|
context: Context?,
|
path: String?,
|
tClass: Class<T>?,
|
params: Map<String?, Any?>?,
|
listener: SubscriberListener<*>?
|
) {
|
request(context, true, path, false, tClass, params, listener)
|
}
|
|
fun <T> requestPost(
|
context: Context?,
|
path: String?,
|
tClass: Class<T>?,
|
params: Map<String?, Any?>?,
|
listener: SubscriberListener<*>?
|
) {
|
request(context, false, path, false, tClass, params, listener)
|
}
|
|
/**
|
* 发送请求
|
*
|
* @param context
|
* @param hideLoading 是否显示加载框 false:显示 true:隐藏
|
* @param path 请求路径,在UrlConfig中定义
|
* @param isGet 是否是Get请求 true:get 请求
|
* @param tClass 对应的数据类型
|
* @param params Post请求时,对应的参数
|
* @param listener 回调请求
|
* @param <T>
|
</T> */
|
fun <T> request(
|
context: Context?,
|
hideLoading: Boolean,
|
path: String?,
|
isGet: Boolean,
|
tClass: Class<T>?,
|
params: Map<String?, Any?>?,
|
listener: SubscriberListener<*>?
|
) {
|
val observable: Observable<*>=if (isGet) {
|
if (params == null) {
|
apiService.requestGet(path)
|
} else {
|
apiService.requestGet(path, params)
|
}
|
} else {
|
if (params != null) {
|
apiService.requestPost(path, params)
|
} else {
|
apiService.requestPost(path)
|
}
|
}
|
|
val mySubscriber: BaseProgressSubscriber<*>=ProgressSubscriber<Any?>(context, hideLoading, listener)
|
observable.subscribeOn(Schedulers.io()).map
|
object : Function<Any?, com.dayu.qiheonlinelibrary.net.BaseResponse<T>?> {
|
override fun apply(o: Any): com.dayu.qiheonlinelibrary.net.BaseResponse<T> {
|
if (o is com.dayu.qiheonlinelibrary.net.BaseResponse) {
|
val tem: com.dayu.qiheonlinelibrary.net.BaseResponse =
|
o as com.dayu.qiheonlinelibrary.net.BaseResponse
|
val response: com.dayu.qiheonlinelibrary.net.BaseResponse<T> =
|
com.dayu.qiheonlinelibrary.net.BaseResponse<T>()
|
//未登录或登录超时,请重新登录
|
if (tem.getCode() == 100401) {
|
if (BusinessProvider.getBusinessProvider() != null) {
|
BusinessProvider.getBusinessProvider().startLoginNavigotor.navigateToLogin(
|
context
|
)
|
}
|
}
|
response.setCode(tem.getCode())
|
response.setMsg(tem.getMsg())
|
if (tClass != null) {
|
if (TextUtils.isEmpty(
|
tem.getData().toString()
|
) && BaseResult::class.java.isAssignableFrom(tClass)
|
) {
|
response.setData(null)
|
return response
|
}
|
if (tem.getData() is Map<*, *>) {
|
try {
|
// response.setData(MyJsonParser.getBeanFromMap((Map<String, Object>) tem.getData(), tClass));
|
val jsonData: String =
|
MyJsonParser.getJsontoMap(tem.getData() as Map<*, *>)
|
response.setData(MyJsonParser.getBeanFromJson<T>(jsonData, tClass))
|
} catch (e: Exception) {
|
e.printStackTrace()
|
}
|
} else if (tem.getData() is List<*>) {
|
try {
|
response.setData(
|
MyJsonParser.getListByJson<T>(
|
MyJsonParser.getJsonbyList<Any>(
|
tem.getData() as List<*>
|
), tClass
|
) as T
|
)
|
} catch (e: Exception) {
|
e.printStackTrace()
|
}
|
} else if (tem.getData() is Int) {
|
response.setData(tem.getData() as T)
|
} else if (tem.getData() is Boolean) {
|
response.setData(tem.getData() as T)
|
}
|
if (tClass.name is String && tem.getData() is String) {
|
try {
|
response.setData(tem.getData() as T)
|
} catch (e: Exception) {
|
e.printStackTrace()
|
}
|
}
|
return response
|
}
|
}
|
|
return null
|
}
|
}
|
.unsubscribeOn(Schedulers.newThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
.subscribe(mySubscriber)
|
}
|
|
|
}
|