Я обновляю некоторые Kotlin для использования LiveData.From:
var words: ArrayList<Word> = ArrayList()
:
:
for (word: Word in words) {
createEntry(word)
}
To:
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 ()'method.
@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)
}
}
}
В мире баз данных я бы использовал курсор, однако я не могу понять, как заставить курсоры работать с итератором ().Я могу объявить это в 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 () или, как я подозреваю, каков правильный способ перебора LiveData из базы данных Room?
Я предполагаю что-то вроде:
val iterator = wordObserver.iteratorWithAdditions()
while (iterator.hasNext()) {
:
}
, но как в этом случае настроить Observer?