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

没有构造函数参数的ViewModelFactory和ViewModel

钱京
2023-03-14

我得到了MyViewModel,它的构造函数是空的

public class MyViewModel extends ViewModel {
    private MutableLiveData<RxBleClient> rxBleClient = new MutableLiveData<RxBleClient>();


    public MyViewModel() {

    }
    
    public MutableLiveData<RxBleClient> getRxBleClient() {
        return rxBleClient;
    }

    public void setRxBleClient(MutableLiveData<RxBleClient> rxBleClient) {
        this.rxBleClient = rxBleClient;
    }
}

我想提供这样的新模型,但有一个问题:

MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);

error: no suitable constructor found for ViewModelProvider(MainActivity)
        MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);
                            ^
    constructor ViewModelProvider.ViewModelProvider(ViewModelStoreOwner,Factory) is not applicable
      (actual and formal argument lists differ in length)
    constructor ViewModelProvider.ViewModelProvider(ViewModelStore,Factory) is not applicable
      (actual and formal argument lists differ in length)

我确实实现了ViewModelProvider.Factory

public class ViewModelFactory implements ViewModelProvider.Factory {

    ViewModelFactory() {
    }

    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        try {
//            what do I need to do here?
            return modelClass.newInstance();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

但我不知道该怎么办,把没有指标的工厂退回去。如何实现?
谢谢

共有1个答案

容磊
2023-03-14

MainActivity可能不是从AppCompatActivity继承的,这就是它不是有效的ViewModelStoreOwner的原因。或者您没有使用ViewModelProviderAndroidX版本。

关于工厂,如果viewmodel有一个默认构造函数,则不需要工厂。

 类似资料:
  • 我正在尝试使用recyclerview和room库创建一个简单的ToDoList应用程序。在使用room和mvvm架构方面,我正在遵循android开发者代码实验室,我似乎遇到了困难。我已经设置了应用程序的每一层,但在尝试使用ViewModelProvider实例化ViewModel时出现了一个错误。下面是我的ViewModel类中的代码。 } 下面是我试图初始化ViewModel的main片段中

  • 我通过本文档了解LiveData和ViewModel。在文档中,ViewModel类具有构造函数, 但是,当我运行代码时,会出现异常: 原因:java.lang.运行时异常:无法创建类的实例UserViewModel原因:java.lang.实例异常:java.lang.类没有零参数构造函数

  • 我是新的Android和Java,并试图使基于位置的应用程序。 编辑 我做了一个非常非常简单的测试代码,得到了同样的错误。这是java: 我也犯了同样的错误。以下是我的应用程序级构建中的依赖项。格雷德尔: 原帖 我试图使用ViewModel和LiveData来更新用户位置,因为我知道这是生命周期感知的最佳方式。我有一个默认的地图活动... 一个扩展LiveData以存储用户位置的类。。。 以及一个

  • 我正在使用并试图将我的导入我的类。 当使用ViewModel查看Google的hilt文档时,我们可以看到他们能够将注入到所述

  • 我正在运行一个应用程序,可以在选择或捕捉它们后查看多个图像。当我运行应用程序时,ImageView部分似乎有问题,它说:

  • 我想启动一项服务,我使用: 启动它: 我的应用崩溃后,logcat返回: java.lang.Class 在 android.app.活动线程.handle上没有零参数构造函数创建服务(活动线程.java:3201) 在 android.app.活动线程.-wrap5(活动线程.java) 在 android.app.活动线程$H.handleMessage(活动线程.java:1586) 在 a