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.
.