引起原因:java.lang.NoSuchMethodException:<init> [class android.app.Application] - viewmodel

Mee*_*raj 12 android android-viewmodel

我正在我的 Android 应用程序中创建自己的视图模型。
\n当应用程序启动时,它崩溃了,我收到了错误

\n
\n

“由以下原因引起:java.lang.NoSuchMethodException:[class android.app.Application]”

\n
\n

1.查看模型类:

\n
public class MainViewModel extends AndroidViewModel implements OnCommunicationListener {\n    \npublic MainViewModel(@NonNull Application application, DeviceData deviceData) {\n        super(application);\n\n\xe2\x80\xa6.\n}\n
Run Code Online (Sandbox Code Playgroud)\n

2.查看模型工厂

\n
public class ViewModelFactory extends ViewModelProvider.AndroidViewModelFactory {\n\n    @NonNull\n    private final Application application;\n    private final DeviceData deviceData;\n\n    public ViewModelFactory(@NonNull Application application, DeviceData deviceData) {\n        super(application);\n        this.application = application;\n        this.deviceData = deviceData;\n    }\n\n    @NonNull\n    @Override\n    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {\n        if (modelClass.isAssignableFrom(MainViewModel.class)) {\n            return (T) new MainViewModel(application, deviceData);\n        }\n        throw new IllegalArgumentException("Unknown ViewModel class");\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

3.主要活动课

\n
 viewModel = ViewModelProviders.of(this).get(MainViewModel.class);\n
Run Code Online (Sandbox Code Playgroud)\n

在主活动中执行以下行时应用程序崩溃

\n
 viewModel = ViewModelProviders.of(this).get(MainViewModel.class);\n
Run Code Online (Sandbox Code Playgroud)\n

Kri*_*lsh 25

如果您使用 Hilt,请确保您的片段和/或活动使用 @AndroidEntryPoint 进行注释。这为我解决了。


Jen*_*nsV 5

您需要将视图模型工厂传递给调用of,否则您的工厂将不会被使用。

viewModel = ViewModelProviders.of(this, viewModelFactoryInstance).get(MainViewModel.class);
Run Code Online (Sandbox Code Playgroud)