无法在片段中创建视图模型 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);
}
我正在使用 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);
}