Для примера, есть у меня класс Human()
который как один из параметров содержит список Car()
class Human() {
...//
public List<Car>
...//
}
Как сохранить такой обьект?
Я так пронимаю, есть 2 варианта
1)либо из каждого обьекта списка делать стринг используя @TypeConverter
2)либо как то использовать one-to-many
Я скину вам кусок кода, который использую у себя. Думаю вы сможете разобраться
class Account {
@Embedded
lateinit var user: User
@Relation(parentColumn = "email", entity = PurseUser::class, entityColumn = "emailId")
lateinit var userPursers: List<PurseUser>
@Relation(parentColumn = "email", entity = TransitionUser::class, entityColumn = "emailId")
lateinit var userTransitions: List<TransitionUser>
}
Модель PurseUser
@Entity(foreignKeys = arrayOf(ForeignKey(entity = User::class, parentColumns = arrayOf("email"), childColumns = arrayOf("emailId"), onDelete = ForeignKey.CASCADE)), primaryKeys = arrayOf("emailId", "walletAddress"))
class PurseUser {
var scoring: Double = 0.toDouble()
lateinit var emailId: String
lateinit var walletAddress: String
@TypeConverters(PurseConverter::class)
lateinit var typePurseEnum: TypePurse
constructor(scoring: Double, emailId: String, walletAddress: String, typePurseEnum: TypePurse) {
this.scoring = scoring
this.emailId = emailId
this.walletAddress = walletAddress
this.typePurseEnum = typePurseEnum
}
constructor() {
}
fun setTypePurse(typePurse: TypePurse) {
this.typePurseEnum = typePurse
}
}
И метод добавления
@Insert
abstract fun insertPurseUser(purseUsers: List<PurseUser>)
@Transaction
open fun insertAccount(account: Account) {
insert2(account.user)
insertPurseUser(account.userPursers)
insertTransitionUser(account.userTransitions)
}
@Transaction
open fun updatePurse(purseUser: PurseUser, purseUser2: PurseUser) {
updatePurseUser(purseUser)
updatePurseUser(purseUser2)
}
Так же по мне очень удобно можно получать данные пользователя одним запросом.
@Transaction
@Query("SELECT * FROM User WHERE email = :emailId")
abstract fun getAccount(emailId: String): Maybe<Account>
Где метод в моем репозитории
override fun getAccount(email: String): Maybe<Account> {
return MaybeUtils<Account>().getMaybe(database.accountDao().getAccount(email))
}
Этот метод находится у меня в презентере
override fun setAdapterTransition() {
repository.getAccount(userState.email).subscribe(object : DisposableMaybeAbstract<Account>(context, context.getString(R.string.emailError), context.getString(R.string.emailError)) {
override fun onSuccess(user: Account) {
account = user
mainScreenView.setAdapterTransition(ModelsView.setAdapterTransition(account))
mainScreenView.setAdapterPurse(ModelsView.setAdapterPurses(account))
mainScreenView.setAdapterPurseTransition(ModelsView.setAdapterPurseTransition(account.userPursers))
mainScreenView.setAdapterTransitionSheet(ModelsView.setAdapterTransitionSheet(context.resources.getStringArray(R.array.sheetTransitions)))
}
})
}
И мой базовый
abstract class DisposableMaybeAbstract<T>(private val context: Context, private val onComplete: String, private val onError: String) : DisposableMaybeObserver<T>() {
override fun onSuccess(t: T) {
MessageUtils.showCustomMessage(context, onError, context.resources.getColor(R.color.colorRed))
}
override fun onError(e: Throwable) {
MessageUtils.showCustomMessage(context, onError, context.resources.getColor(R.color.colorRed))
}
override fun onComplete() {
MessageUtils.showCustomMessage(context, onComplete, context.resources.getColor(R.color.colorRed))
}
}
Пока, что ответ 2 из этого поста мне нравится больше всего
Может я чего то не вижу, если так пишите в коммнеты
Но мне кажется он самым удобным, так как ты сам сохраняешь как тебе нужно без создания доп обьектов и без в последующем внезапных сюрпризов
https://stackoverflow.com/questions/44667160/android-room-insert-relation-entities-using-room
Just Create a User with Pets (Ignore pets).
@Entity
public class User {
@PrimaryKey
public int id;
@Ignore
private List<Pet> petList;
}
Create Pet.
@Entity
public class Pet
{
@PrimaryKey
public int id;
public int userId;
public String name;
}
Now Finally in UserDao.
@Insert
public abstract void insertUser(User user);
@Insert
public abstract void insertPetList(List<Pet> pets);
@Query("SELECT * FROM User WHERE id =:id")
public abstract User getUser(int id);
@Query("SELECT * FROM Pet WHERE userId =:userId")
public abstract List<Pet> getPetList(int userId);
public void insertUserWithPet(User user) {
List<Pet> pets = user.getPetList();
for (int i = 0; i < pets.size(); i++) {
pets.get(i).setUserId(user.getId());
}
insertPetList(pets);
insertUser(user);
}
public User getUserWithPets(int id) {
User user = getUser(id);
List<Pet> pets = getPetList(id);
user.setPetList(pets);
return user;
}
Your Problem can be solved by this without creating UserWithPets POJO.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
если массив {true, true, true} result = true; если массив {true, false, true} result = false;
Мне нужно декодировать видеопоток H264, но стандартный MediaCodec не справляетсяНужен пример использования H264 Cisco в андроиде
Всем приветСтолкнулся с проблемой, из-за которой я уже 3 раза переустанавливал Студию