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

无法创建androidviewmodel实例[重复]

公孙宸
2023-03-14

我正在使用room和ViewModel开发一个notes应用程序,但在初始化ViewModel内部活动时,我得到了以下信息:

JAVAlang.RuntimeException:无法创建类包的实例。笔记。主屏幕。家信

这是我的主要活动

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var viewModel: HomeScreenVM

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setUI()
        setViewModel()
    }

    private fun setUI() {
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }

    private fun setViewModel() {
        viewModel = ViewModelProvider(this, HomeScreenViewModelFactory(this.application))[HomeScreenVM::class.java]
    }
}

而ViewModel就像-

class HomeScreenVM(application: Application) : AndroidViewModel(application) {
    //some methods
}

我的视图模型工厂就像-

class HomeScreenViewModelFactory(private val application: android.app.Application) : ViewModelProvider.AndroidViewModelFactory(application) {
    @Suppress("UNCHECKED_CAST")
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(HomeScreenVM::class.java))
            return HomeScreenVM(application) as T
        throw IllegalArgumentException("Unknown model class")
    }
}

我不知道问题出在哪里。帮助我。提前谢谢。

更新:-完整的stacktrace是

    Process: com.nitkkr.sanjay.notes, PID: 32750
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nitkkr.sanjay.notes/com.nitkkr.sanjay.notes.homeScreen.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.nitkkr.sanjay.notes.homeScreen.HomeScreenVM
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3536)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3708)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2143)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:236)
        at android.app.ActivityThread.main(ActivityThread.java:8087)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
     Caused by: java.lang.RuntimeException: Cannot create an instance of class com.nitkkr.sanjay.notes.homeScreen.HomeScreenVM
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:315)
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:273)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:182)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:151)
        at com.nitkkr.sanjay.notes.homeScreen.MainActivity.setViewModel(MainActivity.kt:29)
        at com.nitkkr.sanjay.notes.homeScreen.MainActivity.onCreate(MainActivity.kt:17)
        at android.app.Activity.performCreate(Activity.java:8157)
        at android.app.Activity.performCreate(Activity.java:8129)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3509)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3708) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2143) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:236) 
        at android.app.ActivityThread.main(ActivityThread.java:8087) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967) 
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:307)
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:273) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:182) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:151) 
        at com.nitkkr.sanjay.notes.homeScreen.MainActivity.setViewModel(MainActivity.kt:29) 
        at com.nitkkr.sanjay.notes.homeScreen.MainActivity.onCreate(MainActivity.kt:17) 
        at android.app.Activity.performCreate(Activity.java:8157) 
        at android.app.Activity.performCreate(Activity.java:8129) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3509) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3708) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2143) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:236) 
        at android.app.ActivityThread.main(ActivityThread.java:8087) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967) 
     Caused by: java.lang.RuntimeException: cannot find implementation for com.nitkkr.sanjay.notes.data.database.NoteDatabase. NoteDatabase_Impl does not exist
        at androidx.room.Room.getGeneratedImplementation(Room.java:100)
        at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:1486)
        at com.nitkkr.sanjay.notes.data.database.NoteDatabase$Companion.getInstance(NoteDatabase.kt:24)
        at com.nitkkr.sanjay.notes.data.database.NoteRepository.<init>(NoteRepository.kt:11)
        at com.nitkkr.sanjay.notes.homeScreen.HomeScreenVM.<init>(HomeScreenVM.kt:12)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:307) 
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:273) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:182) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:151) 
        at com.nitkkr.sanjay.notes.homeScreen.MainActivity.setViewModel(MainActivity.kt:29) 
        at com.nitkkr.sanjay.notes.homeScreen.MainActivity.onCreate(MainActivity.kt:17) 
        at android.app.Activity.performCreate(Activity.java:8157) 
        at android.app.Activity.performCreate(Activity.java:8129) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3509) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3708) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2143) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:236) 
        at android.app.ActivityThread.main(ActivityThread.java:8087) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967) 

共有1个答案

何章横
2023-03-14

viewModel=ViewModelProvider(这是HomeScreenViewModelFactory(应用程序))。get(HomeScreenVM::class.java)

使用这个我希望它会工作。

 类似资料:
  • 你好,我是android中MVVM的新手,正在使用livedata。我正在尝试创建viewmodel的一个实例。我觉得问题在于我没有将存储库传递给viewmodel构造函数。我一直无法创建viewmodel的实例。我不知道该怎么做这里是我的viewmodel和它的创建。

  • 我正在使用tomcat web应用程序和rest webservice,当我插入数据时,我会遇到异常! 我的类CustomerProxy:

  • 我正在开发一本新书android应用程序,但当我测试从logcat获取以下异常的代码时,应用程序崩溃 hread.mainRuntimeException:无法启动活动ComponentInfo{hread.java:6662}:java.lang.reflect.RuntimeException:无法创建ethod.invokeBookViewModel类的实例com.android.inter

  • 当我使用2.14版本的camel时,我能够创建jetty实例...然而,当tomcat加载应用程序时,2.15.2给出了以下错误 这是我的骆驼上下文配置的样子 bean id=“jetty”class=“org.apache.camel.component.jetty.JettyHttpComponent”

  • 这是我的代码 这是从谷歌样本..后我想: 问题就在这里: java.lang.RuntimeException:无法创建类com.lacas.db.room.BookMarkViewModel的实例 我可以用这个片段吗? null