UninitializedPropertyAccessException: lateinit属性尚未初始化

9 浏览
0 Comments

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 create(modelClass: Class): T {

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尚未初始化

0