Android Clean MVVM与匕首2
问题描述:
我刚刚回到了Android的世界Java &。 我在寻找一个好项目启动,将充分利用编译时间DI和MVVM,我发现这两个:Android Clean MVVM与匕首2
现在我的问题...... 我d喜欢做一个基本活动看起来像这样(保留重要部分):
public abstract class ViewModelActivity<VM extends IViewModel> extends AppCompatActivity {
private ActivityComponent activityComponent;
@Inject
private VM viewModel;
protected void inject(AppComponent appComponent) {
appComponent.inject(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppComponent appComponent = ((MvvmApplication) getApplication()).getAppComponent();
inject(appComponent);
activityComponent =
DaggerActivityComponent.builder()
.appComponent(appComponent)
.activityModule(new ActivityModule(this))
.build();
ViewModel.State savedViewModelState = null;
if (savedInstanceState != null) {
savedViewModelState = savedInstanceState.getParcelable(EXTRA_VIEW_MODEL_STATE);
}
viewModel = createViewModel(savedViewModelState);
}
}
所以我的AppComponent应该是这样的:
@AppScope
@Component(modules = {
AppContextModule.class,
AppModule.class,
NetworkModule.class,
GsonModule.class
})
public interface MyAppComponent extends AppComponent {
void inject(DashboardActivity baseActivity);
Picasso picasso();
}
其中AppComponent是:
@AppScope
public interface AppComponent {
Context appContext();
void inject(ViewModelActivity viewModelActivity);
}
最后具体活动为:
public class DashboardActivity extends ViewModelActivity<DashboardViewModel> {}
现在我不断收到以下错误:
Error:(29, 10) error: activities.dashboard.DashboardViewModel cannot be
provided without an @Inject constructor or from an @Provides- or @Produces-
annotated method. This type supports members injection but cannot be
implicitly provided.
activities.dashboard.DashboardViewModel is injected at
mvvm.activity.ViewModelActivity.viewModel
activities.dashboard.DashboardActivity is injected at
app.inject(baseActivity)
我是什么唱?
谢谢!
答
要使用匕首结帐时使用MVVM此示例代码从谷歌
https://github.com/googlesamples/android-architecture-components/tree/master/GithubBrowserSample
它真的做到了非常好,它使用匕首的最新趋势,以及像定义子模块,并使用新的AndroidInjection
注射活动片段。它还使用自定义工厂来创建视图模型,该模型负责注入构造器字段。
错误提示此类“activities.dashboard.DashboardViewModel”必须带有“@Inject”注解的构造函数,或者您需要在其中一个“@Project”方法提供上述课程的模块。那么你有没有做过这些? – Fred
可能的重复[如何解决Dagger 2错误'...不能提供\ [... \]'?](https://stackoverflow.com/questions/44912080/how-doi-i-fix- dagger-2-error-can-be-provided) –
在DashboardViewModel的构造函数中,在顶部添加@Inject。这应该解决它。 –