Gson en Kotlin

uso de Gson en Kotlin

Gson (también conocido como Google Gson) es una biblioteca de código abierto para el lenguaje de programación Java y para Android que permite la conversión entre objetos Java y su representación en notación JSON de una manera sencilla, simplemente invocando los métodos toJson() o fromJson().

Ejemplo de uso: Gson en Wikipedia

Proyecto en GitHub: google-gson

Documentación de Gson: Javadoc

Dependencias en Gradle:

implementation 'com.google.code.gson:gson:2.10.1'

Ejemplo: Lista de contactos usando Gson

contacts.json

{
  "contactos": [
    {
      "nombre": "Angelina Jolie",
      "direccion": "calle los remedios, 29007, malaga",
      "email": "angie@gmail.com",
      "telefono": {
        "casa": "952245407",
        "movil": "603459530",
        "trabajo": "951230246"
      }
    },
    {
      "nombre": "Nikole Kidman",
      "direccion": "calle hilera, 29010, malaga",
      "email": "nikole@gmail.com",
      "telefono": {
        "casa": "952233407",
        "movil": "625459540",
        "trabajo": "951230246"
      }
    },
    {
      "nombre": "Jennifer Lopez",
      "direccion": "calle larios, 29002, malaga",
      "email": "jenny@gmail.com",
      "telefono": {
        "casa": "951065407",
        "movil": "628659550",
        "trabajo": "952002146"
      }
    }
  ]
}

 

Añadir contacts.json a la carpeta assets

¿clase Phone?

¿clase Contact?

¿clase Person?

Ayuda: jsonschema2pojo

Phone.kt

class Phone {
    @SerializedName("casa")
    @Expose
    lateinit var casa: String

    @SerializedName("movil")
    @Expose
    lateinit var movil: String

    @SerializedName("trabajo")
    @Expose
    lateinit var trabajo: String
}

Contact.kt

class Contact {
    @SerializedName("nombre")
    @Expose
    lateinit var nombre: String

    @SerializedName("direccion")
    @Expose
    lateinit var direccion: String

    @SerializedName("email")
    @Expose
    lateinit var email: String

    @SerializedName("telefono")
    @Expose
    lateinit var telefono: Phone
}

Person.kt

class Persona {
    @SerializedName("contactos")
    @Expose
    lateinit var contactos: List<Contact>
}

o

Persona.kt

class Persona {
    @SerializedName("contactos")
    @Expose
    lateinit var contactos: List<Contacto>
}

obtenerContactos()

fun obtenerContactos(): ArrayList<Contacto> {
    var contactos: ArrayList<Contacto> = ArrayList()
    lateinit var contenido: String
    lateinit var gson: Gson
    lateinit var persona: Persona

    try {
        if (!binding.switch1.isChecked) {
            // Analizar contactos
            contenido = leerAsset(applicationContext, CONTACTOS)
            contactos = analizarContactos(contenido)
        } else {
            // usar Gson






        }
    } catch (e: IOException) {
        Log.e("Error: ", e.message.toString())
        mostrarMensaje("Error: " + e.message.toString())
    } catch (e: JsonSyntaxException) {
        Log.e("Error: ", e.message.toString())
        mostrarMensaje("Error: " + e.message.toString())
    } catch (e: JSONException) {
        //e.printStackTrace();
        Log.e("Error: ", e.message.toString())
        mostrarMensaje("Error: " + e.message.toString())
    }

    return contactos
}

 

Deja una respuesta