Biblioteca Moshi para Android

Moshi, una biblioteca JSON desarrollada por Square. Moshi nos permite serializar y deserializar JSON de una manera más eficiente y sencilla. Entonces, antes de comenzar, dividamos el artículo en las secciones que se enumeran a continuación.

  1. ¿Por qué necesitamos una biblioteca de Android para serializar y deserializar?
  2. ¿Cómo hacemos uso de Moshi?
  3. Características de Moshi
  4. Uso de Moshi junto con List.
  5. Uso de Moshi junto con Retrofit

¿Por qué necesitamos una biblioteca de Android para serializar y deserializar?

Cuando hacemos una llamada a la API en Android, casi siempre obtenemos JSON como respuesta. Podemos llamar a ese JSON y analizarlo manualmente para trabajar con él, o podemos usar una biblioteca como Moshi para serializarlo y deserializarlo por nosotros. Usar Moshi puede ayudarnos a reducir la cantidad de líneas que escribimos y la probabilidad de errores.

¿Cómo hacemos uso de Moshi?

Esta sección explicará cómo colaboraríamos con Moshi. Supongamos que tenemos una clase de datos llamada GFG.

data class GFG(val courseName: String, val coursePrice: Int)

y supongamos que tenemos una variable llamada usuario, que se define como:

val gfg= GFG("Spandan", "connectwithspandan@gmail.com")

Ahora convertiremos esto en una estructura JSON con la ayuda de Moshi. Tenemos una clase JsonAdapter y un patrón de construcción para trabajar con Moshi. Como resultado, construimos Moshi con:

Kotlin

val gfgMoshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

En este caso, hemos pasado la clase de datos de usuario como una estructura a la que nos gustaría realizar las acciones. Ahora, para convertir el objeto de la clase User a JSON, usamos

someJsonAdap.toJson(gfg)

Características de Moshi Moshi admite casi todos los tipos de datos de forma predeterminada, como:

  1. Entero, Flotante, etc.
  2. Colecciones y arreglos
  3. Strings, enumeraciones

Además de los tipos mencionados anteriormente, podemos crear los nuestros propios en Moshi. Ilustremos esto con un ejemplo.

Kotlin

data class GFG(val courseName:CName)

Tomamos dos parámetros llamados firstName y lastName en la clase Name. Ahora, cuando obtenemos un JSON de esta clase, queremos el nombre completo del usuario, como firstName + lastName. Podemos hacerlo manualmente cada vez que analicemos el JSON o agregar nuestro propio adaptador y hacer que Moshi lo haga por nosotros. Como resultado, crearemos una clase llamada NameAdapter.

Kotlin

class CourseAdapter { }

Y haremos nuestra conversión dentro de esta clase. Agregaremos dos nuevas funciones: fun fullName() y fun getIndividualNames(). La clase ahora parece ser:

Kotlin

class GFGUserAdapter {
    @ToJson
    fun fullGFGUser(GFGUser: GFGUser): String {
          
    }
  
    @FromJson
    fun getIndividualGFGUsers(json: String): GFGUser {
        
    }
  
}

Hemos anotado fullName con ToJson y getIndividualNames con FromJson en este caso. Esto significa que cuando utilice este adaptador con Moshi, Moshi buscará anotaciones. Digamos que queremos concatenar tanto el nombre como el apellido para devolver el nombre completo en JSON; lo haremos dentro de la función fullName, que se anota con ToJson. De manera similar, dado que agregamos la conversión ToJson para el análisis de JSON, necesitaríamos actualizar la función getIndividualNames, que se anota con FromJson y convertirá los valores de JSON en elementos individuales en la clase de datos Name al asignar JSON a la clase.

Kotlin

@FromJson
fun getIndividualGFGUsers(fullGFGUser: String): GFGUser {
    val GFGUser = fullGFGUser.split(" ")
    return GFGUser(GFGUser[0], GFGUser[1])
}

En este caso, separamos la string fullName del primer espacio vacío para obtener las dos strings que son nombre y apellido en una lista de strings.

Geektip: tenga en cuenta que los adaptadores de Moshi están ordenados por prioridad, por lo que siempre debe agregar el adaptador de Kotlin después de sus propios adaptadores personalizados. De lo contrario, se invocará KotlinJsonAdapterFactory y se ignorarán sus adaptadores personalizados.

Kotlin

@JsonClass(generateAdapter = true)
data class GFG(val gfgName: Name, @EmailCheck val gfg: India?)

Como puede ver, hemos anotado el correo electrónico con EmailCheck, lo que significa que la verificación solo funcionará con el campo de correo electrónico si todas las anotaciones de EmailCheck están presentes. La clase Name permanece sin cambios.

Uso de Moshi junto con List

Aprenderemos cómo convertir una lista en una string y luego una string en una lista en esta sección. Considere el siguiente escenario: recibimos una lista de objetos de nuestro servidor y necesitamos almacenarla en las preferencias compartidas de nuestra aplicación. Nos gustaría convertir la lista de objetos en una string porque solo guarda un tipo de datos primitivo y lo convertiremos nuevamente en una lista cuando lo necesitemos.

Kotlin

val gfgMpshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

Publicación traducida automáticamente

Artículo escrito por therebootedcoder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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