Android usa corrutinas de Kotlin para encapsular bibliotecas de red

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

Supongo que te gusta

Origin blog.csdn.net/long8313002/article/details/108751307
Recomendado
Clasificación