Как добавить новый элемент в данные, у которых ArrayList является свойством?

#android #kotlin #android-room

Вопрос:

У меня есть модель, как показано ниже, я хочу добавить новый элемент в данные друзей, но это создает бесконечный цикл. Так что же мне делать?

 @Entity(tableName = "user_table") class UserModel  : Serializable {  @PrimaryKey  @NonNull  var _id: String = ""   var userName: String? = null   var userAvatar: String? = null    @TypeConverters(ConvertersDAO::class)  var friends : ArrayListlt;Stringgt; = ArrayList() }  

Мой интерфейс DAO

 @Update  suspend fun updateUserDAO(userModel : UserModel)   @Query("select * from user_table where _id =:id")  fun readUserById(id : String) : LiveDatalt;UserModelgt;  

Мои преобразователи

 class ConvertersDAO {  @TypeConverter  fun fromString(value: String?): ArrayListlt;String?gt;? {  val listType: Type = object : TypeTokenlt;ArrayListlt;String?gt;?gt;() {}.type  return Gson().fromJson(value, listType)  }   @TypeConverter  fun fromArrayList(list: ArrayListlt;String?gt;?): String? {  val gson = Gson()  return gson.toJson(list)  } }  

и то, что я пробовал до сих пор(но это так плохо работает)

 private fun updateFriend() {  val friendId = "foo"  viewModel.readUserByIdDAO(userId).observe(this,{   val listTemp = it.friends  listTemp.add(friendId)  it.friends = listTemp   viewModel.updateUserDAO(it)  })  }  

Ответ №1:

Проблема в том, как вы это получаете UserModel . Вы наблюдаете за ним как LiveData и обновляете его в одном и том же блоке , и поэтому каждый раз, когда вы обновляете пользователя, это вызывает повторное обновление наблюдаемого блока кода и приводит к этому бесконечному циклу.

Простое исправление состоит в том, чтобы ввести не LiveData способ получения пользователя из базы данных

 @Query("select * from user_table where _id =:id") suspend fun readUserByIdSync(id : String) : UserModel  

Комментарии:

1. о, я понял. большое спасибо, хорошего дня!