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

Kotin lateinit Var未初始化-Android Studio

萧鸿轩
2023-03-14

我正在开发一个简单的联系人应用程序,可以存储联系人的姓名、电子邮件和号码。语言:Kotlin体系结构:MVVM但我得到一个错误:LateInit属性addContactViewModel

活动:

class AddContact : AppCompatActivity() {

private lateinit var addContactViewModel : AddContactViewModel

companion object{
    const val EXTRA_REPLY = "com.room.contacts.REPLY"
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding  = DataBindingUtil.setContentView<ActivityAddContactBinding>(
        this,R.layout.activity_add_contact
    )

    binding.btnSave.setOnClickListener {
        val replyIntent = Intent()
        val fname= binding.fnameEdit.text.toString()
        val lname= binding.lnameEdit.text.toString()
        val email = binding.emailAddressEdit.text.toString()
        val contactno = binding.contactNumberEdit.text.toString()
        val contact = Contact(fname, lname,email,contactno)
        addContactViewModel.insert(contact)
        val intent = Intent(this, ContactList::class.java)
        // start your next activity
        startActivity(intent)
    }

}}
class AddContactViewModel (application: Application) : AndroidViewModel(application){

private val repository: ContactRepository

init {
    val contactsDao= ContactRoomDatabase.getDatabase(application).contactDao()
    repository = ContactRepository(contactsDao)
}

fun insert(contact: Contact) = viewModelScope.launch {
    repository.insert(contact)
}}

错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.room.contacts, PID: 29383
kotlin.UninitializedPropertyAccessException: lateinit property addContactViewModel has not been initialized
    at com.room.contacts.screens.addContact.AddContact.access$getAddContactViewModel$p(AddContact.kt:15)
    at com.room.contacts.screens.addContact.AddContact$onCreate$1.onClick(AddContact.kt:36)
    at android.view.View.performClick(View.java:4781)
    at android.view.View$PerformClick.run(View.java:19907)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:160)
    at android.app.ActivityThread.main(ActivityThread.java:5541)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)

共有1个答案

濮金鑫
2023-03-14

您可以将AddContactViewModel设置为LateInit属性,而不是将其设置为Lazy属性,以便在您第一次尝试在某个地方使用它时对其进行初始化:

class AddContact : AppCompatActivity() {
    private val addContactViewModel : AddContactViewModel by lazy {
        ViewModelProvider(this).get(AddContactViewModel::class.java)
    }
 类似资料:
  • 以下是我的配置 java版本“1.8.0_101”java(TM)SE运行时环境(构建1.8.0_101-b13)java热点(TM)64位服务器虚拟机(构建25.101-b13,混合模式) 使用Apache http客户端v4.4调用Restful服务,服务URL具有有效的证书(SHA2) 我们使用apache http客户端调用服务。下面是代码 服务调用是间歇性失败的,有一个批处理过程在一个循

  • 我正在尝试运行一个Spring项目。pom.xml: 结果是这样的: 2017-08-17 01:11:01.405信息9156---[restartedMain]org.ocp.TestruleemallApplication:在桌面上启动TestruleemallApplication-PL25CTR,PID 9156(C:\Users\Ilias\DesktoP\TestRuleEmall\

  • 本文向大家介绍tensorflow 初始化未初始化的变量实例,包括了tensorflow 初始化未初始化的变量实例的使用技巧和注意事项,需要的朋友参考一下 今日在Stack Overflow上看到一个问如何只初始化未初始化的变量,有人提供了一个函数,特地粘贴过来共大家品鉴: 通过tf.global_variables()返回一个全局变量的列表global_vars, 然后以python列表解析式的

  • 我正试图在谷歌地图Android API v2中获得一个带有自定义图标的标记。我刚刚更改了Google提供的一个示例。我添加了到方法中的RawMapViewDemoActivity 但我总是得到一个“IBitmapDescriptorFactory未初始化”。 在BitmapDescriptorFactory中,它说: 在使用此类中的任何方法之前,您必须执行以下操作之一以确保初始化此类: > 等待

  • 我在这里看到过类似的问题,如果这看起来像是重复的,我很抱歉,但是类似问题的答案对我没有帮助。所以我有一个方法,它是类的一部分。这里是: 错误表明变量min可能尚未初始化。我不明白这怎么可能是真的。我觉得变量不可能不在for循环之外初始化。请帮忙。谢谢

  • 据我所知,在Java11中,这两个操作可以在一行中完成,不是吗?