无法在片段中创建视图模型 class 的实例

Unable to create instance of view model class in fragment

我正在使用 MVVM 方法创建应用程序我有两个片段,我从服务器获取数据我创建了视图模型 class 和存储库 class 我正在获取数据从 server.But 问题是我无法在它显示的片段中创建 viewmodel class 的实例 此行出错。

viewModel = new ViewModelProvider(getActivity()).get(FactsViewModel.class);

下面是我的代码:

MyRepository.class

public class MyRepository {

MutableLiveData<List<Facts>> mutableLiveData = new MutableLiveData<>();
Application application;

public MyRepository(Application application) {
    this.application = application;
}

public MutableLiveData<List<Facts>> getMutableLiveData(){

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService apiService = retrofit.create(ApiService.class);

    apiService.getFacts().subscribeOn(Schedulers.io())
                         .observeOn(AndroidSchedulers.mainThread())
                         .subscribe(new Observer<List<Facts>>() {
                             @Override
                             public void onSubscribe(Disposable d) {

                             }

                             @Override
                             public void onNext(List<Facts> facts) {

                                 if(facts.size() > 0 && facts != null){

                                     mutableLiveData.setValue(facts);
                                 }
                             }

                             @Override
                             public void onError(Throwable e) {

                                 TastyToast.makeText(application,e.getMessage(),TastyToast.LENGTH_SHORT,
                                         TastyToast.ERROR).show();
                             }

                             @Override
                             public void onComplete() {

                             }
                         });

       return mutableLiveData;
   }
}

FactsViewModel.class

public class FactsViewModel extends AndroidViewModel {

MyRepository repo;

public FactsViewModel(@NonNull Application application) {
    super(application);

    repo = new MyRepository(application);
}

public LiveData<List<Facts>> getAllFacts(){

    return repo.getMutableLiveData();
  }
}

HomeFragment.class

public class HomeFragment extends Fragment {

RecyclerView recycle;
FactsAdapter adapter;
FactsViewModel viewModel;

AdView adView;
AdRequest adRequest;

public HomeFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_home, container, false);

    recycle = view.findViewById(R.id.recycle);
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    mLayoutManager.setReverseLayout(true);
    mLayoutManager.setStackFromEnd(true);
    recycle.setLayoutManager(mLayoutManager);
    recycle.setHasFixedSize(true);

    viewModel = new ViewModelProvider(getActivity()).get(FactsViewModel.class);

    return view;
     
}

有人请告诉我如何解决此错误,我们将不胜感激。

谢谢

错误是因为 Activity 尚未创建。

将 ViewModel 实例化移至 onActivityCreated 生命周期是关键

@Override
public void onActivityCreated(Bundle savedInstanceState) {
   viewModel = new ViewModelProvider(getActivity()).get(FactsViewModel.class);
}