【发布时间】:2019-06-20 13:32:17
【问题描述】:
我正在更新一些 Kotlin 以使用 LiveData。 来自:
var words: ArrayList<Word> = ArrayList()
:
:
for (word: Word in words) {
createEntry(word)
}
收件人:
lateinit var words: LiveData<List<Word>>
:
words = WordRoomDatabase.getDatabase(application,scope).wordDao().getAll()
:
// How do I loop through all the words?
我试过了:
for (word: Word in words) {
}
但这失败了,因为单词没有'iterator()'方法。
@Entity
data class Word(
@PrimaryKey(autoGenerate = true)
var id: Long?,
@NonNull
var name: String?
) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readValue(Long::class.java.classLoader) as? Long,
parcel.readString()
)
override fun writeToParcel (parcel: Parcel, flags: Int) {
:
:
}
companion object CREATOR : Parcelable.Creator<Word> {
override fun createFromParcel(parcel: Parcel): Word{
return Word(parcel)
}
override fun newArray(size: Int): Array<Word?> {
return arrayOfNulls(size)
}
}
}
在数据库世界中,我会使用游标,但是,我也不知道如何使游标与 iterator() 一起工作。我可以在DAO中声明它,但是我该如何使用呢?
@Dao
interface WordDao {
@Query("SELECT * FROM Word")
fun getAll(): LiveData<List<Word>>
@Query("SELECT * FROM Word")
fun getCursorAll(): LiveData<Cursor>
}
例如如果我尝试
words = WordRoomDatabase.getDatabase(application,scope).wordDao().getCursorAll()
我仍然收到缺少 iterator() 方法的错误。
我是否需要创建一个 iterator() 方法,或者,我怀疑更有可能, 从 Room 数据库中迭代 LiveData 的正确方法是什么?
我猜是这样的:
val iterator = wordObserver.iteratorWithAdditions()
while (iterator.hasNext()) {
:
}
但是在这种情况下,我该如何设置观察者呢?
【问题讨论】:
标签: list arraylist kotlin android-room android-livedata