Vuelva a comprender OK HTTP: obtenga más información sobre cómo usarlo.
Como marco de solicitud de red más popular en Android, OkHttp tiene muchas ventajas.
Para el cliente, lo que nos importa es enviar la solicitud correcta al servidor y obtener el resultado del procesamiento. En OkHttp, creo que se puede dividir en tres partes:
En OkHttp, OkHttpClient, las solicitudes y respuestas se crean a través del modo generador. Para el cliente, no necesitamos preocuparnos demasiado por cómo se construye la respuesta, porque este es el resultado de la respuesta encapsulada OkHttp. Solo nos centramos en cómo construir la solicitud Request y el cliente OkHttpClient.
La solicitud utiliza el patrón generador para configurar la URL y solicita los métodos método, encabezado, etiqueta y cacheControl.
OkHttp envía RequestBody al servidor mediante el método POST. En OkHttp, este cuerpo de solicitud es el cuerpo de la solicitud. El solicitante puede ser:
RequestBody tiene varios métodos estáticos para crear diferentes tipos de cuerpos de solicitud:
Al final, equivale a reescribir los dos métodos abstractos de RequestBody para escribir secuencias. . Si se pasan parámetros de tipo de flujo, simplemente anule estos dos métodos abstractos.
Por ejemplo, enviamos una cadena:
Enviar archivo:
Mencionar comunicación:
Para envío de formularios y solicitudes de bloqueo, OkHttp proporciona dos subclases de RequestBody, FormBody y MultipartBody.
FormBody también utiliza el modo constructor, que es muy simple: simplemente agrega un par clave-valor en forma de clave-valor.
Hay dos formas de agregar pares clave-valor:
Por ejemplo:
MultipartBody también usa el modo constructor y MultipartBody. El constructor puede crear cuerpos de solicitud complejos compatibles con formularios de carga de archivos HTML. Cada parte del cuerpo de solicitud de múltiples bloques es su propio cuerpo de solicitud y puede definir sus propios encabezados de solicitud. Si están presentes, estos encabezados de solicitud se utilizan para describir esta parte del cuerpo de la solicitud. Por ejemplo, la disposición del contenido, la longitud del contenido y el tipo de contenido se agregan automáticamente al título si están disponibles.
Los tipos MIME son:
Existen varios métodos principales:
Por ejemplo, para enviar un archivo de imagen:
OkHttpClient usa Builder modo. A través de Builder, puede configurar el tiempo de espera de la conexión, el tiempo de lectura y escritura, si se debe almacenar en caché y volver a conectarse, y configurar varios interceptores.
Se recomienda mantener una instancia de OkHttpClient en una App. OkHttpClient admite una cierta cantidad de concurrencia. El número máximo de solicitudes simultáneas para el mismo host es 5 y el número máximo de solicitudes simultáneas para todas las solicitudes es 64. Esto está relacionado con Dispatcher en OkHttp y se puede configurar el número de concurrencia. Este artículo no trata sobre Dispatcher.
Un ejemplo:
OkHttpClient admite configuración independiente, como establecer diferentes tiempos de solicitud y reconstruir un OkHttpClient a través del método newBuilder() de OkHttpClient.
Por ejemplo:
Hemos discutido cómo crear una solicitud y OkHttpClient, lo único que queda es enviar la solicitud y obtener la respuesta del servidor. Las solicitudes enviadas por OkHttp se pueden dividir en sincrónicas y asincrónicas. OkHttpClient primero construye una llamada a través de Solicitud y luego realiza una solicitud sincrónica o asincrónica a través de esta llamada.
En modo síncrono, llame al método ejecutar() y devuelva la respuesta, que bloqueará el hilo actual:
En modo asíncrono, llamar al método en cola (devolución de llamada de devolución de llamada) estar en otro Los resultados se devuelven en el hilo.
Para almacenar en caché la respuesta, necesita un directorio de caché legible y grabable y establecer el tamaño. El directorio de caché debe ser privado y otras aplicaciones que no sean de confianza no pueden acceder al archivo.
Si varios cachés acceden al mismo directorio de caché al mismo tiempo, se informará un error. Por lo tanto, es mejor inicializar OkHttpClient solo una vez en su aplicación, configurar un caché para esta instancia y usar este caché durante toda la vida útil de la aplicación. De lo contrario, varios cachés se afectarán entre sí, provocando errores de caché y fallas del programa.
El caché de respuesta está configurado con encabezados HTTP. Puede agregar encabezados de solicitud como cache-control: max-stall = 3600. Edad máxima significa que el cliente puede recibir una respuesta cuya vida útil no exceda el tiempo especificado (en segundos).
Para evitar que las respuestas se almacenen en caché, puedes utilizar CacheControl. fuerza_net. Para evitar el uso de la red, CacheControl. Se utiliza FORCE_CACHE.
Llame al método Call.cancel() para cancelar inmediatamente la solicitud de red. Si el hilo actual está escribiendo una solicitud o leyendo una respuesta, informará una excepción de IO. Este enfoque es más conveniente si ya no se necesitan solicitudes de red. Por ejemplo, volver a la página anterior de la aplicación. Se pueden cancelar solicitudes tanto sincrónicas como asincrónicas.
Puedes determinar si la solicitud fue exitosa mediante el código de respuesta. Si el servidor devuelve datos, puede obtener un ResponseBody para leer el cuerpo de la respuesta.
Si utiliza el método string() de ResponseBody para leer los datos en la memoria a la vez, si los datos superan 1 MB, se puede informar un desbordamiento de la memoria. Por lo tanto, se recomienda leer datos en una secuencia, como el método byteStream() de ResponseBody.
Cabe señalar que:
Muchas clases en OkHttp utilizan el modo constructor y se pueden configurar de manera flexible según sea necesario. Quienes utilizan el modelo de creación son:
Si utiliza OkHttp solo para solicitudes de red, generalmente deberá empaquetarlo usted mismo. Si no quieres reinventar la rueda, existen algunas bibliotecas de código abierto excelentes en Github que puedes usar (este artículo solo enumera algunas destacadas):
Documentación wiki oficial de OkHttp