kotlin flow(一)
2022-11-01 本文已影响0人
supter川
数据流flow包含三部分
- 数据提供方:网络数据,数据库数据添加到数据流中
- 中介:可对数据进行拦截操作
- 数据使用方:则是消费数据流中的数据
- 数据提供,模拟网络获取数据
DataStore.kt
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>
}
- 数据使用在view model中
FlowViewModel.kt
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
}
}