【发布时间】:2019-06-26 12:51:29
【问题描述】:
我有一个实体,其中一个字段是 MutableList。我想返回该列表中包含给定 ID 的所有用户 ID。查询总是返回一个空列表。如果我打开数据库,虽然我可以看到这些字段已正确存储并且有要返回的用户 ID。我究竟做错了什么?
数据类:
@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)
})
【问题讨论】:
标签: android kotlin android-room android-architecture-components