El arsenal de Android: redes

Una biblioteca de red HTTP simple y potente para Kotlin / Android.

Funciones

Próximamente funciones programadas

  • Compatibilidad con el analizador jackson
  • Almacenamiento en caché de mapa de bits y eliminación automática de la solicitud anterior de ImageLoading
  • Nueva API de interceptor para manipular la solicitud de ejecución previa

Instalación

La biblioteca está disponible en los repositorios de jcenter

Gradle

  {
    jcenter ()
}

dependencias {
    compilar   & # 39;  com.kine: kine: 1.0.0.0  & # 39;    //  para JVM 
    complete   & # 39;  com.kine: kine-json: 2.8.6.0  & # 39;    //  para compatibilidad con json (no use esta dependencia en el proyecto de Android) 
    compilar   & # 39;  com.kine: kine-android: 1.0.0.0  & # 39;    //  para Android 
    complete   & # 39;  com.kine: kine-rxjava2: 2.2.19.0  & # 39;    //  para compatibilidad con RxJava2 
    complete   & # 39;  com.kine: kine-rxjava3: 3.0.6.0  & # 39;    //  para compatibilidad con RxJava3 
    complete   & # 39;  com.kine: kine-coroutine: 1.3.8.0  & # 39;    //  para soporte de Coroutine 
    complete   & # 39;  com.kine: kine-livesata: 1.3.8.0  & # 39;    //  para compatibilidad con LiveData 
    complete   & # 39;  com.kine: kine-gson: 2.8.6.0  & # 39;    //  para el apoyo de Gson 
    complete   & # 39;  com.kine: kine-moshi: 1.9.3.0  & # 39;    //  por el apoyo de Moshi 
    complete   & # 39;  com.kine: kine-okhttp: 4.8.1.0  & # 39;    //  para compatibilidad con OkHttp 
    complete   & # 39;  com.kine: kine-okhttplegacy: 3.12.12.0  & # 39;    //  para compatibilidad con OkHttp heredado (API 9) 
    compilar   & # 39;  com.kine: kine-imageloader: 1.0.0.0  & # 39;    //  para compatibilidad con carga de imágenes 
} 
Nota: Kine detectará automáticamente si hay dependencias de android, okhttp, gson o moshi y establecerá el cliente de hilo principal apropiado, convertidor o devolución de llamada. No es necesario especificarlos, si tanto moshi como gson están presentes, kine agregará moshi primero (los convertidores siempre se llaman en orden de suma, por lo que si tiene ambas dependencias e intenta analizarlas usando gson, no funcionará). Para anular este comportamiento, puede configurarlos usando Kine.builder () como se muestra a continuación

Uso

Configuración de Kine

  Kine.Builder  ()
            .headers (hashMapOf ())   //  encabezados comunes para todas las solicitudes de aplicaciones 
            .client ( OkHttpKineClient  ())   //  cliente común para todas las solicitudes 
            .converter ( GsonConverter  ())   //  convertidor gson para análisis de respuesta 
            .connectionChecker ( SimpleConnectionChecker  (context  !! ))   //  una herramienta sencilla para comprobar la conexión sin Internet 
            .baseUrl ( ConfigUtils  .dummyBaseUrl)   //  una URL base para todas las solicitudes 
            .logLevel ( LogLevel .  ERROR )   //  registro para mostrar por nivel 
            .disableAllLogs ( true )   //  inhabilita todos los registros para todas las solicitudes 
            .build () 
Nota: las opciones suministradas con KineRequest siempre tendrán prioridad sobre la configuración global Kine excepto para los encabezados, los encabezados siempre se adjuntarán a los encabezados de solicitud individuales especificados del usuario

Las solicitudes de Kine se pueden realizar con la clase KineRequest o utilizando uno de los String u otros métodos de extensión. Si especifica una devolución de llamada, la llamada es asincrónica, si no es sincrónica. La excepción se lanzará de forma sincrónica (debe capturarlos). La excepción se enviará a la devolución de llamada onError en modo asincrónico, excepto por el error del usuario, como no especificar un convertidor y esperar una respuesta analizada.

Obtenga Json

   " https: // example / api / test "   .httpGet (). responseAs ( JSONObject  ::  class  .java, {response  - > 
                 val  response  =  response.body
           }, {y  - > 
               e.printStackTrace ()
           })
  //  para sincronización 
  val  answer  =    " https: // example / api / test "   .httpGet () .responseAs ( JSONObject  ::  class  .java) 

Get string

   " https: // ejemplo / api / test  "  .httpGet (). responseAs ( String  ::  class  .java, {response  - > 
                 val  response  =  response.body
           }, {y  - > 
               e.printStackTrace ()
           })
  //  para sincronización 
  val  answer  =    " https: // example / api / test "   .httpGet () .responseAs ( String  ::  class  .java) 

Get JsonArray

   " https: // ejemplo / api / test  "  .httpGet (). responseAs ( JSONArray  ::  class  .java, {response  - > 
                 val  list  =     Gson  (). fromJsonArray  <  Post >  (response.body.toString ())
           }, {y  - > 
               e.printStackTrace ()
           })
  //  para sincronización 
  val  respuesta  =    " https://jsonplaceholder.typicode.com/posts "   .httpGet (). responseAs ( JSONArray  ::  class  .java) 

Gson (requiere dependencia de kine-gson) / Moshi (requiere dependencia de kine-moshi)

   " https: // example / api / test "   .httpGet (). ResponseAs ( Usuario  ::  class  .java, {response  - > 
                 val  usuario :   Usuario    =  response.body
           }, {y  - > 
               e.printStackTrace ()
           })
  //  para sincronización 
  val  answer  =    " https: // example / api / test "   .httpGet () .responseAs ( Usuario  ::  class  .java) 

RxJava2 (requiere la dependencia kine-rxjava2) / RxJava3 (requiere la dependencia kine-rxjava3)

Único

   " https: // example / api / test "   .httpGet (). ToSingle (clazz)
            .subscribeOn ( Programadores  .io ())
            .observeOn ( AndroidSchedulers  .mainThread ())
            .subscribe ( objeto  :    SingleObserver  <  KineResponse  <  T > ? >  {
                sobrescribir diversión onSubscribe (d :    Desechable ) {
                }
                anular la diversión en el éxito (respuesta :    KineResponse  <  T > ) {
                    val response  =  response.body.toString ()
                }
                 anular    diversión    onError  ( y :    Throwable ) {
                    e.printStackTrace ()
                }
            }) 

Fluido

   " https: // example / api / test "   .httpGet (). ToFlowable (clazz)
            .subscribeOn ( Programadores  .io ())
            .observeOn ( AndroidSchedulers  .mainThread ())
            .subscribe ( objeto  :    FlowableSubscriber  <  KineResponse  <  T  >>  {

                anular diversión en error (e :    Throwable ) {
                    e.printStackTrace ()
                }
                cancelar la diversión onSubscribe (s :    Suscripción ) {
                    bajo pedido (1)
                }
                anular la diversión en Siguiente (respuesta :    KineResponse  <  T > ) {
                    val response  =  response.body.toString ()
                }
                 sobrescribe    diversión    enComplete  () {
                }
            }) 

Observable

   " https: // example / api / test "   .httpGet (). ToObservable (clazz)
            .subscribeOn ( Programadores  .io ())
            .observeOn ( AndroidSchedulers  .mainThread ())
            .subscribe ( objeto  :    Observer  <  KineResponse  <  T > ? >  {
                anular diversión en error (e :    Throwable ) {
                    e.printStackTrace ()
                }
                anular la diversión en Siguiente (respuesta :    KineResponse  <  T > ) {
                    val response  =  response.body.toString ()
                }
                 anular    diversión    enComplete  () {
                }
                 anular    diversión    en Suscripción  ( d :    Desechable ) {
                }
            }) 

Kotlin Coroutine (requiere adicción a kine-coroutine)

   GlobalScope  .launch ( Dispatchers.Main ) {
             val  respuesta  =    " https: // example / api / test "   .httpGet (). ResponseAsCoroutine (clazz)
        } 

Descargar archivo

   " https: //example/api/test/files/test10Mb.db "   .downloadTo (
             Archivo  ( Environment  .getExternalStorageDirectory (),   " test.db " ), {descargado, total  -  > 
  //  tenga en cuenta que el oyente de progreso no se llama en el hilo principal, pero siempre se llama en el hilo de fondo 
  //  para solicitud asincrónica y llamada de subproceso en solicitud de sincronización 
                ¿ocupaciones? .runOnUiThread {
                     val  progreso  =    " progreso  $ {((descargado  *   100 )  /  total)}   "
                }
            }, {response  - > 
                  val  SavedPath  =  response.body? .camino
            }, {y  - > 
                e.printStackTrace ()
            }) 

Cargando imagen (requiere la dependencia de kine-imageloader)

Cargar mapa de bits desde Url

      " https: //example/api/test/files/abc.png "   .loadBitmapResponseFromUrl ({response  - > 
            imageView  !!  .setImageBitmap (respuesta.cuerpo)
        }, {e  - >  e.printStackTrace ()}) 

Cargar imagen desde la URL a ImageView

    imageView.loadImage (  " https: // ejemplo /api/test/files/abc.pnghardware  
   Kine  .cancelAllRequests ()   // [19459019solicituddecancelación] // [19459019clientesconfiguradosconKine
   Kine  .cancelAllRequests (etiqueta)   //  cancela todas las solicitudes con esa etiqueta con los clientes 
   //  configurado con Kine (pasar la nota nula cancelará todas las solicitudes)  

Solicitud individual

     val  client  =    OkHttpKineClient  ()
    " url "   .httpGet (). Cliente (cliente) .responseAs ( Usuario  ::  clase  .java)
  client.cancelAllRequests ()   //  se comporta como los métodos anteriores Kine cancel  

Carga de imágenes de varias partes

     KineRequest  .upload (  "" [19659050]) .addMultiPartParam (  " nombre "    " test "   null ). addMultiPartFileParam (  " tset " ,
    Archivo  (  " sdcard / test.apk " ),  null ). SetUploadListener {bytesWritten, total  - > } .responseAs ( User  ::  class  .java, {response  - > [19659206] val  response  =  response.body
     }, {y  - > 
           e.printStackTrace ()
     }) 

Requisitos

Para Android

OkHttp 4x

  • Min SDK 21+ (para OkHttpClient puede escribir su propio cliente para admitir la versión de Api a continuación)
  • Java 8+

OkHttp 3x (heredado)

  • Min SDK 9+ (para OkHttpClient puede escribir su propio cliente para admitir la versión de Api debajo de él)
  • Java 7+

Para Kotlin / Java

R8 / Proguard

Si usa R8 / Proguard, es posible que deba agregar reglas para Coroutines, RxJava2 RxJava3 OkHttp y Okio.

Licencia

  Copyright 2020 Kine

Con licencia de Apache License, Versión 2.0 (la "Licencia");
no puede utilizar este archivo excepto de acuerdo con la licencia.
Puede obtener una copia de la licencia en

   https://www.apache.org/licenses/LICENSE-2.0

A menos que lo exija la ley aplicable o se acuerde por escrito, el software
distribuido bajo la Licencia se distribuye "TAL CUAL",
SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sea expresa o implícita.
Consulte la licencia para el idioma específico que rige los permisos e
limitaciones de la licencia.

.

Compruebe también

en vivo desde Droidcon, incluida la mayor actualización de Gemini en Android Studio y más lanzamientos del SDK de Android.

Acabamos de lanzar nuestro episodio de otoño de #TheAndroidShow en YouTube etcétera desarrollador.android.comy esta vez …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *