Saltar al contenido

Base de datos de salas de Android: ¿Cómo manejar Arraylist en una entidad?

Solución:

Type Converter están hechos específicamente para eso. En su caso, puede utilizar el fragmento de código que se proporciona a continuación para almacenar datos en la base de datos.

public class Converters {
    @TypeConverter
    public static ArrayList<String> fromString(String value) {
        Type listType = new TypeToken<ArrayList<String>>() {}.getType();
        return new Gson().fromJson(value, listType);
    }

    @TypeConverter
    public static String fromArrayList(ArrayList<String> list) {
        Gson gson = new Gson();
        String json = gson.toJson(list);
        return json;
    }
}

Y menciona esta clase en tu Room DB así

@Database (entities = {MainActivityData.class},version = 1)
@TypeConverters({Converters.class})

Más info aquí

Opción n. ° 1: tener MyListItems frijol @Entity, como MainActivityData es. MyListItems establecería un @ForeignKey de regreso MainActivityData. En este caso, sin embargo, MainActivityData no puede tener private ArrayList<MyListItems> myListItems, como en Room, las entidades no se refieren a otras entidades. Un modelo de vista o una construcción POJO similar podría tener una MainActivityData y su asociado ArrayList<MyListItems>, aunque.

Opción n. ° 2: configure un par de @TypeConverter métodos para convertir ArrayList<MyListItems> hacia y desde algún tipo básico (por ejemplo, un String, como usar JSON como formato de almacenamiento). Ahora, MainActivityData puede tener su ArrayList<MyListItems> directamente. Sin embargo, no habrá una tabla separada para MyListItems, por lo que no puede consultar MyListItems muy bien.

Kotlin versión para convertidor de tipo:

 class Converters {

    @TypeConverter
    fun listToJson(value: List<JobWorkHistory>?) = Gson().toJson(value)

    @TypeConverter
    fun jsonToList(value: String) = Gson().fromJson(value, Array<JobWorkHistory>::class.java).toList()
}

Solía JobWorkHistory objeto para mi propósito, usa el objeto tuyo

@Database(entities = arrayOf(JobDetailFile::class, JobResponse::class), version = 1)
@TypeConverters(Converters::class)
abstract class MyRoomDataBase : RoomDatabase() {
     abstract fun attachmentsDao(): AttachmentsDao
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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