gpt4 book ai didi

android - 如何观察协程流的 ContentProvider 变化

转载 作者:行者123 更新时间:2023-12-02 18:43:23 25 4
gpt4 key购买 nike

我有一个流程可以通过内容提供商从数据库中获取数据。

fun getDataFlow(): Flow<Result> {
return flow {
emit(Result.Loading)

// fetchAll() is the method to fetch data via contentResolover.query()
val results = fetchAll()
emit(Result.Success(categories))
}.catch { e ->
emit(Result.Error(e))
}
}

那么如何在ContentProvider数据变化时触发重新获取数据(调用onChange)?

val contentObserver = object : ContentObserver(null) {
override fun onChange(selfChange: Boolean) {
super.onChange(selfChange)
}
}

最佳答案

你可以使用回调流

@ExperimentalCoroutinesApi
fun ContentResolver.register(uri: Uri) = callbackFlow<Boolean> {
val observer = object : ContentObserver(null) {
override fun onChange(selfChange: Boolean) {
trySend(selfChange)
}
}
registerContentObserver(uri, false, observer)

invokeOnClose {
unregisterContentObserver(observer)
}
}

然后你可以做这样的事情

getDataFlow().combine(ContentResolver.register("YOUR_URI")){data, isSelfChange -> 

}

关于android - 如何观察协程流的 ContentProvider 变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67778416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com