Android 为什么我会出错;e:错误:无法访问数据源";,如果我使用ViewModelFactory?
我正在尝试使用ANDROID分页库在回收器视图中实现分页列表。我还使用ViewModel类。但我发现了一个奇怪的错误 在我的viewmodel中,我有一个属性activeDataSource,我想在其中保存最后一个datasource对象(通过DataSourceFactory创建),并在从存储库收到列表已更新的通知时调用datasource方法invalidate 但是我得到了一个关于起源的错误,我不知道: e:错误:无法访问数据源 值得注意的是,如果我不使用自己的ViewModelFactory创建新的viewmodel对象,则不会出现此错误 是什么导致了这个错误 我的viewmodel类:Android 为什么我会出错;e:错误:无法访问数据源";,如果我使用ViewModelFactory?,android,android-viewmodel,android-mvvm,android-paging,Android,Android Viewmodel,Android Mvvm,Android Paging,我正在尝试使用ANDROID分页库在回收器视图中实现分页列表。我还使用ViewModel类。但我发现了一个奇怪的错误 在我的viewmodel中,我有一个属性activeDataSource,我想在其中保存最后一个datasource对象(通过DataSourceFactory创建),并在从存储库收到列表已更新的通知时调用datasource方法invalidate 但是我得到了一个关于起源的错误,我不知道: e:错误:无法访问数据源 值得注意的是,如果我不使用自己的ViewModelFacto
class ArticleDetailsViewModel @Inject constructor(
private val repository: NewsRepository
) : ViewModel(), LifecycleObserver {
private var activeDataSource: DataSource<Int, Article>? = null
val articlesLiveList: LiveData<PagedList<Article>>
get() {
val dataSourceFactory = ArticleDataSourceFactory(repository)
val config = PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setPageSize(5)
.build()
Log.e("asd", "=== Create list live data ===")
return LivePagedListBuilder(dataSourceFactory, config)
.setFetchExecutor(Executors.newSingleThreadExecutor())
.build()
}
fun onResetClick() {
repository.onIvalidate()
}
fun setDataSource(data: DataSource<Int, Article>) {
activeDataSource = data
}
}
您在哪里传递对
DaggerViewModelFactory
的引用?我正在activity onCreate方法中注入DaggerViewModelFactory。使用factory,我创建了所有需要的viewmodel,您在哪里传递对DaggerViewModelFactory的引用。使用factory,我创建了所需的所有viewmodel
class DaggerViewModelFactory @Inject constructor(private val viewModelsMap: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>) :
ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
val creator = viewModelsMap[modelClass] ?: viewModelsMap.asIterable().firstOrNull {
modelClass.isAssignableFrom(it.key)
}?.value ?: throw IllegalArgumentException("unknown model class $modelClass")
return try {
creator.get() as T
} catch (e: Exception) {
throw RuntimeException(e)
}
}
}
@NewsScope
@Module
interface NewsViewModelModule {
@Binds
@IntoMap
@ViewModelKey(ArticleDetailsViewModel::class)
fun testViewModel(viewModel: ArticleDetailsViewModel): ViewModel
}