我正在研究Example上的MVVM。 我不理解为什么初始化了变量'instance'却没有初始化 请告诉我... 当我在getInstance()中记录var实例时,在调用时似乎没有被调用。和错误代码 “ lateinit属性mNicePlaces尚未初始化” 我想问题出在这里
fun getInstance(): NicePlaceRepository {
if (instance == null) {
instance = NicePlaceRepository()
}
Log.d("TAG","11111")
return instance
}
但是我通过单例初始化了该实例...为什么不调用它?我该怎么办?
ViewModel
private lateinit var mNicePlaces :MutableLiveData<List<NicePlace>>
lateinit var mRepository : NicePlaceRepository
fun init(){
if(mNicePlaces!=null) return
mRepository = NicePlaceRepository().getInstance()
mNicePlaces = mRepository.getNicePlaces()
}
fun getNicePlaces():LiveData<List<NicePlace>>{
return mNicePlaces
}
存储库
private val dataSet = ArrayList<NicePlace>()
companion object {
lateinit var instance: NicePlaceRepository
}
fun getInstance(): NicePlaceRepository {
if (instance == null) {
instance = NicePlaceRepository()
}
Log.d("TAG","11111")
return instance
}
fun getNicePlaces():MutableLiveData<List<NicePlace>>{
setNicePlaces()
var data = MutableLiveData<List<NicePlace>>()
data.value = dataSet
return data
}
private fun setNicePlaces(){
for(i:Int in 0..5){
dataSet.add(NicePlace("111", "111"))
}
}
答案 0 :(得分:1)
由于您已声明lateinit var instance: NicePlaceRepository
,因此该实例不能为null。并且您的支票if (instance == null)
无法通过,实例也不会启动。
一种解决方法是通过检查Lateinit实例是否已初始化而不是null检查。或使实例为可空:
更改此内容
lateinit var instance: NicePlaceRepository
收件人:
var instance: NicePlaceRepository? = null
此外,您还必须在getInstance()方法中添加双刘海:
fun getInstance(): NicePlaceRepository {
if (instance == null) {
instance = NicePlaceRepository()
}
Log.d("TAG","11111")
return instance!!
}