无法创建androidviewmodel实例
无法创建androidviewmodel实例
我正在使用Room和ViewModel开发一个笔记应用程序,但在Activity中初始化ViewModel时,遇到以下问题:
java.lang.RuntimeException: 无法创建类package.notes.homeScreen.HomeScreenVM的实例
这是我的主要Activity:
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) {
//一些方法
}
而我的ViewModel工厂类如下:
class HomeScreenViewModelFactory(private val application: android.app.Application) : ViewModelProvider.AndroidViewModelFactory(application) {
@Suppress("UNCHECKED_CAST")
override fun
if (modelClass.isAssignableFrom(HomeScreenVM::class.java))
return HomeScreenVM(application) as T
throw IllegalArgumentException("未知的模型类")
}
}
我不知道问题出在哪里,请帮助我。提前感谢。
更新:
完整的堆栈跟踪如下:
Process: com.nitkkr.sanjay.notes, PID: 32750 java.lang.RuntimeException: 无法启动组件信息{com.nitkkr.sanjay.notes/com.nitkkr.sanjay.notes.homeScreen.MainActivity}:java.lang.RuntimeException:无法创建类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: 无法创建类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: 无法找到com.nitkkr.sanjay.notes.data.database.NoteDatabase的实现。NoteDatabase_Impl不存在 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.(NoteRepository.kt:11) at com.nitkkr.sanjay.notes.homeScreen.HomeScreenVM. (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)