Kae*_*rez 5 android viewmodel kotlin android-viewmodel
我目前正在开发一个项目来练习使用 Dagger-Hilt 进行依赖注入,但是我无法实例化我的 ViewModel,我已经查看了同一主题的其他一些问题,大多数问题都指向 Gradle,但是没有为我修复它,Stacktrace 中的所有错误都来自内部类,除了 MainActivity 中涉及我的 ViewModel 的两行之外
\n这是堆栈跟踪:
\nE/AndroidRuntime: FATAL EXCEPTION: main\nProcess: com.example.practiceproject, PID: 9873\njava.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.practiceproject/com.example.practiceproject.ui.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.practiceproject.ui.viewmodel.DogViewModel\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)\n at android.os.Handler.dispatchMessage(Handler.java:107)\n at android.os.Looper.loop(Looper.java:214)\n at android.app.ActivityThread.main(ActivityThread.java:7356)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)\n Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.practiceproject.ui.viewmodel.DogViewModel\n at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)\n at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)\n at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:112)\n at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:146)\n at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:111)\n at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)\n at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)\n at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54)\n at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41)\n at com.example.practiceproject.ui.MainActivity.getDogViewModel(MainActivity.kt:15)\n at com.example.practiceproject.ui.MainActivity.onCreate(MainActivity.kt:22)\n at android.app.Activity.performCreate(Activity.java:7802)\n at android.app.Activity.performCreate(Activity.java:7791)\n at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)\xc2\xa0\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:107)\xc2\xa0\n at android.os.Looper.loop(Looper.java:214)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:7356)\xc2\xa0\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)\xc2\xa0\n Caused by: java.lang.InstantiationException: java.lang.Class<com.example.practiceproject.ui.viewmodel.DogViewModel> has no zero argument constructor\n at java.lang.Class.newInstance(Native Method)\n at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)\n at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)\xc2\xa0\n at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:112)\xc2\xa0\n at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:146)\xc2\xa0\n at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:111)\xc2\xa0\n at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)\xc2\xa0\n at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)\xc2\xa0\n at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54)\xc2\xa0\n at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41)\xc2\xa0\n at com.example.practiceproject.ui.MainActivity.getDogViewModel(MainActivity.kt:15)\xc2\xa0\n at com.example.practiceproject.ui.MainActivity.onCreate(MainActivity.kt:22)\xc2\xa0\n at android.app.Activity.performCreate(Activity.java:7802)\xc2\xa0\n at android.app.Activity.performCreate(Activity.java:7791)\xc2\xa0\n at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)\xc2\xa0\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)\xc2\xa0\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)\xc2\xa0\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:107)\xc2\xa0\n at android.os.Looper.loop(Looper.java:214)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:7356)\xc2\xa0\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)\xc2\xa0\nRun Code Online (Sandbox Code Playgroud)\n这是视图模型:
\nclass DogViewModel @Inject constructor(\nprivate val getDefaultImages: GetDefaultImages\n) : ViewModel() {\n\nval dogModel = MutableLiveData<DogModel>()\nval isLoading = MutableLiveData<Boolean>()\n\nfun onCreate() {\n viewModelScope.launch {\n isLoading.value = true\n val result = getDefaultImages()\n if(!result.isNullOrEmpty()) {\n dogModel.value = result[0]\n isLoading.value = false\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这就是我声明的地方:
\n@AndroidEntryPoint\nclass MainActivity : AppCompatActivity() {\nprivate lateinit var binding: ActivityMainBinding\n\nprivate val dogViewModel: DogViewModel by viewModels()\n\noverride fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n binding = ActivityMainBinding.inflate(layoutInflater)\n setContentView(binding.root)\n\n dogViewModel.onCreate()\n\n dogViewModel.dogModel.observe(this) {\n initRecyclerView(it)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
@AndroidEntryPoint在 Fragment 或 Activity 类上方写入。@HiltViewModel在你的 ViewModel 类上面。| 归档时间: |
|
| 查看次数: |
10350 次 |
| 最近记录: |