当前位置: 首页 > 知识库问答 >
问题:

uniinitializedpropertyaccessexception:late init属性尚未初始化

鄂育
2023-03-14

我有一个类,我注入到ViewModel ViewModel工厂,当在活动中的onCreate方法中初始化视图模型时,它说传递的值没有初始化。

下面是我的代码

我对Kotlin很陌生,所以尝试过调试,但在这个问题上卡住了。

这是Mainactive代码:

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)
        }


**My ViewModel:**



   class MainActivityListViewModel @Inject constructor(val 
    repoRepository: RepoRepository): BaseViewModel() {

    //private lateinit var repoRepository: RepoRepository
    private var disposable: CompositeDisposable? = null

    private val repos = MutableLiveData<List<Repo>>()
    private val repoLoadError = MutableLiveData<Boolean>()
    private val loading = MutableLiveData<Boolean>()


     init {
        disposable = CompositeDisposable()
        fetchRepos()
      }

     fun getRepos(): LiveData<List<Repo>> {
        return repos
     }
    }

我的ViewModelFactory:

   class ViewModelFactory @Inject constructor(private val 
   repoRepository: RepoRepository): ViewModelProvider.Factory{


    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        if 
   (modelClass.isAssignableFrom(MainActivityListViewModel::class.java)) 
   {
            @Suppress("UNCHECKED_CAST")
            return MainActivityListViewModel(this.repoRepository) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")

    }


   }

我的班级回购:

  class RepoRepository @Inject constructor(private val githubRepos: 
    GithubRepos){


    private lateinit var repoService: GithubRepos


    fun getRepositories(): Single<List<Repo>> {
        return repoService.getRepos()
    }

    fun getSingleRepo(owner: String, name: String): Single<Repo> {
        return repoService.getSingleRepo(owner, name)
    }
   }

这是我收到的错误:

   Unable to start activity ComponentInfo{com.carllewis14.repos/com.carllewis14.repos.ui.MainActivity}: kotlin.UninitializedPropertyAccessException: lateinit property 
  repository has not been initialized

共有3个答案

暨曾笑
2023-03-14

如果您使用静态编程语言1.2,您可以很容易地检查lateinit变量是否已初始化。如果没有,那么您可以始终使用not null方法。

无论如何,以下是检查延迟 var 是否已初始化的方法:

if (::fullName.isInitialized) {
    print("Hi, $fullName")
}
祁远
2023-03-14

看看我在这里的答案(也许它有帮助)带有“?”的可空var与延迟var

本质上,您永远不会初始化您的< code > repository:repo repository 。

根据您编写的代码,您在活动中也不需要存储库的实例,它应该只在< code>ViewModel(具有注入)的构造函数中创建

对于private lateinit var repoService:GithubRepos,您也会遇到类似的问题;如果它在对象的构造函数中,则不必再次声明它。

廖夜洛
2023-03-14

这是因为您试图在使用实例初始化存储库之前使用它,而没有检查其初始化。

使用延迟时,null 不能在该变量中使用。

lateinit var存储库:RepoRepository

然后,在使用对象的任何方法之前,检查它是否已初始化:

< code > if(::repository . is initialized){ }

断续器

 类似资料:
  • Json服务器数据显示,在使用retrofit2和rxjava2的android中,当参数传递给inteface时,会出现错误。 接口

  • 我不知道这是怎么回事 主要活动 我遇到了这个问题 2022-03-18 09:18:27.393 13874-13874/com。实例githubuser2 E/AndroidRuntime:致命异常:主进程:com。实例githubuser2,PID:13874 java。lang.RuntimeException:无法启动活动组件信息{com.example.githubuser2/com.e

  • 我正在尝试使用Spring-boot+Vaadin创建一个web项目,并且希望使用spring-data-jpa和hibernate从PostgreSQL数据库中获取数据。 在我的Vaadin看来,我尝试自动连接我的服务类,但我总是得到null,而且eror堆栈跟踪没有告诉我原因。 数据库得我得配置: 视图和UI: pom.xml: 我的服务: 更新的解决方案:

  • 我知道一个类似的问题已经在这里得到了回答。但那是由于黄油刀库的问题,但我的情况不同。在我的例子中,当我在基本活动中使用dagger injected属性时,它显示了由:kotlin.uninitializedPropertyAccessException引起的错误:lateinit属性pref尚未初始化 AppComponent

  • 我试图将ViewModelFactory注入到活动中,但它总是抛出同样的错误:lateinit属性ViewModelFactory尚未初始化。我找不到我可能做错了什么。请参阅上面我的类中的代码 AppComponent.kt TweetSentimentsApplication.kt

  • 我正在使用Dagger2来注入类依赖,比如Bellow。 但我在TranslateProvider.kt收到一个错误: UninitializedPropertyAccessException:lateinit属性appComponent尚未初始化 我不明白,请帮帮我。 谢了!