UninitializedPropertyAccessException: lateinit属性尚未初始化
UninitializedPropertyAccessException: lateinit属性尚未初始化
我有一个注入到ViewModel和ViewModel工厂中的类,在Activity的onCreate方法中初始化ViewModel时,它显示传递的值未初始化。
以下是我的代码
我对Kotlin还比较新,所以尝试调试但在这个问题上卡住了。
这是MainActivity的代码:
class MainActivity: AppCompatActivity(), RepoSelectedListener {
@Inject
lateinit var viewModel: MainActivityListViewModel
lateinit var lifecycleOwner: LifecycleOwner
lateinit var repoSelectedListener: RepoSelectedListener
@Inject
lateinit var repository: RepoRepository
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProviders.of(this, ViewModelFactory(repository)).get(MainActivityListViewModel::class.java)
repoRecyclerView.apply {
layoutManager = LinearLayoutManager(context)
adapter = RepoListAdapter(viewModel, lifecycleOwner, repoSelectedListener)
}
}
我的ViewModel:
class MainActivityListViewModel @Inject constructor(val
repoRepository: RepoRepository): BaseViewModel() {
//private lateinit var repoRepository: RepoRepository
private var disposable: CompositeDisposable? = null
private val repos = MutableLiveData>()
private val repoLoadError = MutableLiveData
private val loading = MutableLiveData
init {
disposable = CompositeDisposable()
fetchRepos()
}
fun getRepos(): LiveData> {
return repos
}
}
我的ViewModelFactory:
class ViewModelFactory @Inject constructor(private val
repoRepository: RepoRepository): ViewModelProvider.Factory{
override fun
if
(modelClass.isAssignableFrom(MainActivityListViewModel::class.java))
{
@Suppress("UNCHECKED_CAST")
return MainActivityListViewModel(this.repoRepository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
我的Repo类:
class RepoRepository @Inject constructor(private val githubRepos:
GithubRepos){
private lateinit var repoService: GithubRepos
fun getRepositories(): Single> {
return repoService.getRepos()
}
fun getSingleRepo(owner: String, name: String): Single
return repoService.getSingleRepo(owner, name)
}
}
我收到的错误:
无法启动Activity ComponentInfo{com.carllewis14.repos/com.carllewis14.repos.ui.MainActivity}: kotlin.UninitializedPropertyAccessException: lateinit属性repository尚未初始化