为何无法在ViewModel类中使用DataStore?
问题分析与解决方法
你遇到的问题主要有两个原因,对应解决方法如下:
1. 未通过Context实例访问扩展属性
你声明的recommendationDataStore是Context的扩展属性,必须依托Context对象才能调用。你在ViewModel中直接写recommendationDataStore,系统无法识别,需要改为通过传入的context实例访问:
修改后代码:
class MainViewModel(private val context: Context) : ViewModel() { fun collectData(dataToCollect : JSONObject){ context.recommendationDataStore.updateData { } } }
2. 扩展属性的可见性限制
你的扩展属性用了private修饰,这意味着它只能在声明该属性的当前文件内访问。如果MainViewModel在另一个文件中,就会无法识别这个属性。根据你的需求调整可见性:
- 若只需要同模块内访问,改为
internal - 若需要全局访问,去掉
private(默认public)
修改后扩展属性声明:
val Context.recommendationDataStore : DataStore<RecConfigData> by dataStore(fileName = "Recommendations.json", serializer = RecommendationSerializer) // 或同模块可见:internal val Context.recommendationDataStore...
内容的提问来源于stack exchange,提问作者Rahul Rawat
相关产品推荐
相关产品推荐

