Запрос комнаты: поиск в списке всегда возвращает ноль - PullRequest
1 голос
/ 26 июня 2019

У меня есть объект, в котором одно из полей является MutableList. Я хочу вернуть все идентификаторы пользователей, которые содержат данный идентификатор в этом списке. Запрос всегда возвращает пустой список. Если я открою базу данных, я увижу, что поля хранятся правильно и есть идентификаторы пользователей, которые нужно вернуть. Что я делаю неправильно?

Класс данных:

@Entity
data class User(
  @PrimaryKey
  @SerializedName("id")
  @ColumnInfo(name = "userId")
  var userId: String,
  @SerializedName("username")
  var userName: String = "",
  var city: String = "",
  var postsIds: MutableList<String>
)

Дао:

@Dao
interface UserDao {
   @Query("SELECT * FROM user WHERE postsIds LIKE :id")
   fun getForPost(id: String): List<User>

// some other queries
}

Репозиторий:

fun getUsersForPost(id: String): LiveData<List<User>> {
        val data = MutableLiveData<List<User>>()
        GlobalScope.launch {
            val query = async(Dispatchers.IO) { userDao.getForPost(id) }
            val result = query.await()
            if (result.isNullOrEmpty()) {
                // todo fetch from the API
            } else {
                data.postValue(result)
            }
        }
        return data
    }

Использование:

ViewModel: 

fun getPost(id: String): Post {
  val post = repository.getPost(id)
  _postEditors.value = repository.getUsersForPost(id).value
  return post
}

Fragment: 

viewModel.postEditors.observe(this, Observer { 
  Log.d(TAG, $it)
})

1 Ответ

0 голосов
/ 02 июля 2019

Просто просматривая ваш код, я думаю, что вы делаете userDao.getForPost(id), но, вероятно, вы должны делать userDao.getForPost("%"+id+"%")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...