Как встроить список объектов в комнату Android? - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу встроить список некоторого класса сущности в другую сущность Нравится:

@Entity
public class FirstEntity() {}

@Entity
public class SecondEntity() {

@Embedded
List<FirstEntity> firstEntities ;

}

Может кто-нибудь дать мне решение с примером. Спасибо

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

вы должны использовать соединения для решения вашей проблемы вместо увеличения избыточности данных. Если ты хочешь научиться, перейдите на https://www.guru99.com/sqlite-join.html#1. Этот путь будет лучше, я думаю.

0 голосов
/ 14 сентября 2018

Я нашел решение. Мне пришлось создать новый класс, как этот

public class Wrapper {

    @Embedded
    public FirstEntity firstEntity;

    @Relation (parentColumn = columnOfFirstEntity, entityColumn = columnOfSecondEntity)
    public List<SecondEntity> secontEntities;

    //Insert getters and setters

}

Вы должны использовать сущность Отношения как список, даже если у вас есть только один элемент, просто выберите и установите первый элемент в списке, если у вас есть только один элемент.

Дао будет выглядеть примерно так

@Dao
public interface WrapperDao {

    @Query( "SELECT *  FROM FirstEntity" )
    public List<Wrapper> getAllWrappers();

}
0 голосов
/ 04 сентября 2018

Вам нужно использовать конвертер. Я преобразую список объектов в строку JSON через библиотеку GSON (поэтому добавьте зависимость в ваш файл Gradle):

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

Сначала создайте конвертер с аннотацией @TypeConverter для преобразования вашего списка (здесь мой пример с классом с именем Output):

class OutputConverter {

    @TypeConverter
    fun fromOutputList(outputs: List<Output>?): String? {
        if (outputs == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<List<Output>>() {}.type
        return gson.toJson(outputs, type)
    }

    @TypeConverter
    fun toOutputList(outputString: String?): List<Output>? {
        if (outputString == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<List<Output>>() {}.type
        return gson.fromJson(outputString, type)
    }
}

Затем вам нужно объявить конвертер в вашем классе базы данных:

@Database(entities = [(YourParentClass::class)], version = 1)
@TypeConverters(OutputConverter::class)
abstract class YourDataBase : RoomDatabase() {
    abstract fun yourDao(): YourDao
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...