kotlin flow(一)

2022-11-01  本文已影响0人  supter川

数据流flow包含三部分

  1. 数据提供方:网络数据,数据库数据添加到数据流中
  2. 中介:可对数据进行拦截操作
  3. 数据使用方:则是消费数据流中的数据
引用官方的图
class TestRepository(private val apis: Apis?) {
    val allBook: Flow<List<String>> = flow {
        delay(5000)
        var result = apis?.getBookList()
        if (result.isNullOrEmpty()){
            result = mutableListOf("A类","B类","C类","D类","E类")
        }
        emit(result)
    }
}

interface Apis {
    suspend fun getBookList(): List<String>
}
class FlowViewModel : ViewModel() {
    val mBooks = MutableLiveData<List<String>>()
    private val repository by lazy {
        TestRepository(loadClass())
    }

    fun getAllBook() {
        viewModelScope.launch {
            repository.allBook
                .catch {
                    Log.d("MainViewModel", "getAllBook: Error")
                }
                .flowOn(Dispatchers.IO)
                .collect {
                    mBooks.value = it
                }
        }
    }

    private fun loadClass(): Apis? {
        val clazz = Class.forName("com.example.kotlindemos.Apis").kotlin
        val obj = clazz.objectInstance as Apis?
        return obj
    }
}
上一篇下一篇

猜你喜欢

热点阅读