我尝试在 Android 上将 LiveData 与 Content Provider 一起使用,但是我无法管理它,因为 Provider 查询方法如下:
public Cursor query
所以它返回一个 Cursor,而我需要一个 LiveData。 如果我尝试将查询方法的返回类型更改为
public LiveData<Cursor> query
我收到错误:
"error: query(Uri,String[],String,String[],String) in FaProvider cannot override query(Uri,String[],String,String[],String) in ContentProvider
return type LiveData<Cursor> is not compatible with Cursor"
是否有将 LiveData 与 Content Provider 结合使用的解决方案?
最佳答案
应该能够用可变的实时数据对象包装光标,如@mohd-faizan提到的
abstract class ContentProviderLiveData<T>(
private val context: Context,
private val uri: Uri ) : MutableLiveData<T>() {
private lateinit var observer: ContentObserver
override fun onActive() {
observer = object : ContentObserver(null) {
override fun onChange(self: Boolean) {
// Notify LiveData listeners an event has happened
postValue(getContentProviderValue())
}
}
context.contentResolver.registerContentObserver(uri, true, observer) }
override fun onInactive() {
context.contentResolver.unregisterContentObserver(observer)
}
/**
* Implement if you need to provide [T] value to be posted
* when observed content is changed.
*/
abstract fun getContentProviderValue(): T
}
更多内容请看这里: https://medium.com/@jmcassis/android-livedata-and-content-provider-updates-5f8fd3b2b3a4
关于android - 将 LiveData 与内容提供商结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52594694/