【问题标题】:Android view model class has no zero argument constructor,Instantiation Exception in fragment [duplicate]Android视图模型类没有零参数构造函数,片段中的实例化异常[重复]
【发布时间】:2020-12-12 07:41:52
【问题描述】:

我有一个视图模型类,我需要在片段中实例化它。 但我得到了:

java.lang.RuntimeException: Cannot create an instance of class com.example.project.favourites.FavViewModel

Caused by: java.lang.InstantiationException: java.lang.Class<com.example.project.favourites.FavViewModel> has no zero argument constructor

这是导致崩溃的行:

favViewModel= new ViewModelProvider(this).get(FavViewModel.class); 
(This line is within onViewCreated in fragment)
   

请帮忙!!!!!!

下面是 FavViewModel 类

public class FavViewModel extends AndroidViewModel {
    private FavRepository repository;
    private LiveData<List<FavItem>> allFav;

    public FavViewModel(@NonNull Application application) {
        super(application);
        repository=new FavRepository(application);
        allFav=repository.getAllFav();
    }


    public void insert(FavItem favItem){
        repository.insert(favItem);
    }

    public void delete(FavItem favItem){
        repository.delete(favItem);
    }

    public void deleteAll(){
        repository.deleteAll();
    }
    public LiveData<List<FavItem>> getAllFav(){
        return allFav;
    }
}

【问题讨论】:

  • 贴出`FavViewModel'的代码
  • @Vishnu 添加 FavViewModel 的代码

标签: java android mvvm android-room viewmodel


【解决方案1】:

尝试使用这个...

像这样初始化ViewModel。您还需要将ViewModelFactoryViewModelProvider 构造函数一起传递。

favViewModel = new ViewModelProvider(this,
                new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(FavViewModel.class);

希望这会有所帮助。随时要求澄清...

【讨论】:

  • @Vishu 谢谢!这行得通!唯一的问题是它将是 getActivity().getApplication()
【解决方案2】:

您可以使用以下注释来注释您的模型类

@NoArgsConstructor

使用此链接lombok

,您将获得有关 lombok 、 NoArgsConstructor 和更多注释的更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多