Visión general
Recientemente, la biblioteca de red tiene que ser reemplazada nuevamente, lo que ha provocado que todos los códigos comerciales se reemplacen y se vuelvan a probar y se regrese. Para evitar que se encuentren tales cosas en el futuro y para reducir el costo de reemplazar la biblioteca central, la biblioteca de red ahora está encapsulada usando una corrutina.
Método de llamada de API ideal
launch {
val response = TestReq(q = "电脑").request<TestResponse>()
Toast.makeText(this, response?.result?.toString()?:"网络异常", Toast.LENGTH_SHORT).show()
}
Definición de solicitud
@URL("https://suggest.taobao.com/sug")
@GET
data class TestReq(var code: String = "utf-8", val q: String) : IReq
class TestResponse {
var result: List<Any>? = null
}
Descripción
Launch es una extensión de clase de Context. Para Activity, la corrutina se puede cerrar cuando se destruye; otros escenarios pueden administrar la corrutina por sí mismos. P.ej:
import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity() , CoroutineScope by MainScope() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
launch {
val response = TestReq(q = "电脑").request<TestResponse>()
Toast.makeText(this@MainActivity, response?.result?.toString()?:"网络异常", Toast.LENGTH_SHORT).show()
}
}
override fun onDestroy() {
super.onDestroy()
cancel()
}
}
utilizar
Citar
implementation 'com.zhangzheng.easyhttp:library:1.0.1'
inicialización
Predeterminado (HttpUrlConnection)
EasyHttp.init(DefaultAdapter(GsonJsonParse()))
implementation 'com.google.code.gson:gson:2.8.6'
OkHttp
EasyHttp.init(OKHttpAdapter(GsonJsonParse()))
implementation 'com.squareup.okhttp3:okhttp:3.8.0'
implementation 'com.squareup.okio:okio:1.12.0'
implementation 'com.google.code.gson:gson:2.8.6'
Vollery
EasyHttp.init(VolleyAdapter(this,GsonJsonParse()))
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.google.code.gson:gson:2.8.6'
Si está utilizando FastJson, puede reemplazar el analizador
GsonJsonParse() --> FastJsonParse()
implementation 'com.alibaba:fastjson:1.2.37'
Si la corrutina no está disponible, verifique si se introduce la biblioteca de corrutinas
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1"
Extensión personalizada
Puede extender EasyHttp.IAdapter usted mismo, y solo necesita desarrollar un adaptador para el reemplazo posterior de la biblioteca principal de solicitudes de red. Para el análisis de json, IResponseParse se puede implementar para expandir. Los ejemplos son los siguientes:
IAdapter
class OKHttpAdapter(var parse: IResponseParse) : EasyHttp.IAdapter {
override suspend fun request(url: String, params: Map<String, String>, isGet: Boolean): String {
val okHttpClient = OkHttpClient()
val formBody = FormBody.Builder()
params.forEach {
formBody.add(it.key,it.value)
}
val request: Request =if(isGet){
Request.Builder().url(url.urlWithParam(params)).method("GET", null)
}else{
Request.Builder().url(url).method("POST", createParamBody(params))
}.build()
val call: Call = okHttpClient.newCall(request)
return call.execute().body()?.string()?:""
}
override fun <T> parse(value: String, clazz: Class<T>)=parse.parse(value,clazz)
private fun createParamBody(params: Map<String, String>):FormBody{
val formBody = FormBody.Builder()
params.forEach {
formBody.add(it.key,it.value)
}
return formBody.build()
}
}
IResponseParse
class FastJsonParse :IResponseParse{
override fun <T > parse(value: String, clazz: Class<T>)=JSON.parseObject(value,clazz)
}
dirección de github: https://github.com/long8313002/EasyHttp