Android Room Database: How to handle Arraylist in an Entity? Android Room Database: How to handle Arraylist in an Entity? java java

Android Room Database: How to handle Arraylist in an Entity?


Type Converter are made specifically for that. In your case, you can use code snippet given below to store data in DB.

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;    }}

And mention this class in your Room DB like this

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

More info here


Option #1: Have MyListItems be an @Entity, as MainActivityData is. MyListItems would set up a @ForeignKey back to MainActivityData. In this case, though, MainActivityData cannot have private ArrayList<MyListItems> myListItems, as in Room, entities do not refer to other entities. A view model or similar POJO construct could have a MainActivityData and its associated ArrayList<MyListItems>, though.

Option #2: Set up a pair of @TypeConverter methods to convert ArrayList<MyListItems> to and from some basic type (e.g., a String, such as by using JSON as a storage format). Now, MainActivityData can have its ArrayList<MyListItems> directly. However, there will be no separate table for MyListItems, and so you cannot query on MyListItems very well.


Kotlin version for type converter:

 class Converters {    @TypeConverter    fun listToJson(value: List<JobWorkHistory>?) = Gson().toJson(value)    @TypeConverter    fun jsonToList(value: String) = Gson().fromJson(value, Array<JobWorkHistory>::class.java).toList()}

I Used JobWorkHistory object for my purpose, use the object of your own

@Database(entities = arrayOf(JobDetailFile::class, JobResponse::class), version = 1)@TypeConverters(Converters::class)abstract class MyRoomDataBase : RoomDatabase() {     abstract fun attachmentsDao(): AttachmentsDao}