+-
android – 无法创建ViewModel类的实例(无法启动活动ComponentInfo)
我在我的项目中使用MVVM,Retrofit,LiveData但我在看到这些链接之前得到了这个错误

> Cannot create an instance of custom ViewModel
> Cannot create an instance of class ViewModel

错误

java.lang.RuntimeException:       
Unable to start activity ComponentInfo{ir.orangehat.movieinfo/ir.orangehat.movieinfo.application.home.HomeActivity}: java.lang.RuntimeException:

Cannot create an instance of class ir.orangehat.movieinfo.application.home.HomeViewModel

这是我的ViewModel,我认为问题出在我的构造函数中

public class HomeViewModel extends AndroidViewModel {

private MovieRepository movieRepository;

public HomeViewModel(@NonNull Application application, Context context, LifecycleOwner lifecycleOwner) {
    super(application);
    movieRepository = new MovieRepository(lifecycleOwner, context);
}

LiveData<List<Movie>> getMovies() {
    return movieRepository.getMovies();
}}

知识库

public class MovieRepository extends BaseRepository {

private LifecycleOwner lifecycleOwner;
private MovieApi movieApi;
private MovieDatabaseHelper movieDatabaseHelper;

public MovieRepository(LifecycleOwner lifecycleOwner, Context context) {
    this.lifecycleOwner = lifecycleOwner;
    movieApi = getRetrofitHelper().getService(MovieApi.class);
    movieDatabaseHelper = new MovieDatabaseHelper(context);
}

public LiveData<List<Movie>> getMovies() {
    LiveData<List<Movie>> moviesLiveData = movieApi.getMovieList();
    moviesLiveData.observe(lifecycleOwner, new Observer<List<Movie>>() {
        @Override
        public void onChanged(@Nullable List<Movie> movieArrayList) {
            movieDatabaseHelper.Save(movieArrayList);
        }
    });

    return movieDatabaseHelper.getAll();
} }

活动类

public class HomeActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // the error is here
    HomeViewModel homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class);

    homeViewModel.getMovies().observe(HomeActivity.this, new Observer<List<Movie>>() {
        @Override
        public void onChanged(@Nullable List<Movie> movieArrayList) {
            String str = null;
            if (movieArrayList != null) {
                str = Arrays.toString(movieArrayList.toArray());
            }
            Log.e("movies", str);
        }
    });
}

}

我应该在我的项目和定制工厂中使用Dagger吗?

最佳答案
引用 the documentation for AndroidViewModel

Subclasses must have a constructor which accepts Application as the only parameter.

您的构造函数不符合该要求.

或者:

>从HomeViewModel中删除Context上下文和LifecycleOwner lifecycleOwner构造函数参数,或
>创建可以构建HomeViewModel实例的a ViewModelProvider.Factory,并将该工厂与ViewModelProviders.of()一起使用

点击查看更多相关文章

转载注明原文:android – 无法创建ViewModel类的实例(无法启动活动ComponentInfo) - 乐贴网