RecyclerView中的会议室数据库条目

时间:2020-03-20 11:16:26

标签: android kotlin android-recyclerview android-room android-database

我想在 RecyclerView 中显示房间数据库条目。到目前为止,我已经有了“房间”骨架,并且可以在RecyclerView中显示一些虚拟内容(不是来自“房间”):

enter image description here

但是,我很难显示Room DB条目而不是虚拟内容。在Arduino中,EEPROM I / O东西曾经几乎是一个单行,但是在Android Room中,此概念上容易完成的任务似乎是代码密集且不那么困难的挑战。这使我想到了第一个问题:

1)在我的情况下,数据库非常苗条和简单,是否有比Room更少的开销和类更少的方法?

关于“房间”方法,我认为我已经很接近了。我在执行以下操作时遇到困难:

2)如何用Room-DB条目(ViewModel中的allJumps)替换init DummyContent中的for循环?

这是到目前为止我得到的(我没有在ViewModel下发布任何东西,例如Repository和DAO,因为现在不应该关注它们):

DummyItems (虚拟内容将由Room DB条目替换)

object DummyContent {

    // An array of sample (dummy) items.
    val ITEMS: MutableList<DummyItem> = ArrayList()

    // A map of sample (dummy) items, by ID.
    val ITEM_MAP: MutableMap<String, DummyItem> = HashMap()

    private val COUNT = 25

    init {
        // Add some sample items.
        // TO BE REPLACED BY ROOM DB ENTRIES <----------------------------------------------------
        for (i in 1..COUNT) {
            addItem(createDummyItem(i))
        }
    }

    private fun addItem(item: DummyItem) {
        ITEMS.add(item)
        ITEM_MAP.put(item.id, item)
    }

    private fun createDummyItem(position: Int): DummyItem {
        return DummyItem(position.toString(), "Item " + position, makeDetails(position))
    }

    private fun makeDetails(position: Int): String {
        val builder = StringBuilder()
        builder.append("Details about Item: ").append(position)
        for (i in 0..position - 1) {
            builder.append("\nMore details information here.")
        }
        return builder.toString()
    }

    // A dummy item representing a piece of content.
    data class DummyItem(val id: String, val content: String, val details: String) {
        override fun toString(): String = content
    }
}

所有跳转/ JumpData

// allJumps is of type LiveData<List<JumpData>>

@Entity
data class JumpData (
    @PrimaryKey var jumpNumber: Int,
    var location: String?
}

ViewModel

class JumpViewModel(application: Application) : AndroidViewModel(application) {

    // The ViewModel maintains a reference to the repository to get data.
    private val repository: JumpRepository
    // LiveData gives us updated words when they change.
    val allJumps: LiveData<List<JumpData>>

    init {
        // Gets reference to WordDao from WordRoomDatabase to construct
        // the correct WordRepository.
        val jumpsDao = JumpRoomDatabase.getDatabase(application, viewModelScope).jumpDao()
        repository = JumpRepository(jumpsDao)
        allJumps = repository.allJumps // OF INTEREST <----------------------------------------------------
    }

    fun insert(jump: JumpData) = viewModelScope.launch {
        repository.insert(jump)
    }

    fun getJumps() : LiveData<List<JumpData>> {
        return allJumps
    }
}

1 个答案:

答案 0 :(得分:1)

您可以尝试将其添加到 Scanner scan = new Scanner(System.in); String line; while (!(line = scan.nextLine()).equals("0")) { System.out.println("line: " + line); }

object DummyContent

这是viewModel的init块:

object DummyContent {
    val jumpsLiveData = MutableLiveData<List<JumpData>>()

    private val observedLiveData: LiveData<List<JumpData>>? = null
    private val dataObserver = object : Observer<List<JumpData>> {
        override fun onChanged(newList: List<JumpData>) {
            // Do something with new data set
        }
    }
    fun observeJumpsData(jumpsLiveData: LiveData<List<JumpData>>) {
        observedLiveData?.removeObserver(dataObserver)
        observedLiveData = jumpsLiveData.apply { 
            observeForever(dataObserver)
        }
    }
}

通过此代码,init { val jumpsDao = JumpRoomDatabase.getDatabase(application, viewModelScope).jumpDao() repository = JumpRepository(jumpsDao) allJumps = repository.allJumps DummyContent.observeJumpsData(getJumps()) } 将在创建DummyContent之后自动订阅新数据

在创建了ViewModel的“活动”中,将此文本添加到RecyclerView的末尾:

onCreate

override fun onCreate(savedState: Bundle?) { DummyContent.jumpsLiveData.observe(this, Observer { recyclerAdapter.changeItemsList(it) } } -一种更改回收者数据的方法,我相信您已经创建了它