Java Dagger 2在android中注入依赖项时出错
我正在用Dagger 2学习DI,但是我在依赖注入方面遇到了一些问题,我在这个应用程序中使用MVP,所以我将我的所有类打包 我试图向我的演示者注入依赖项,但我遇到了一个错误“如果没有@Providers注释方法,则无法提供”。我检查了我的代码,并检查了一些示例,我假设我正在注入此依赖项,我尝试了不同的方法,但我无法修复此错误,我不知道如何修复它 只有我想打开第二个活动,调用演示者的SplashActivity,但通过DI注入 格拉德尔图书馆Java Dagger 2在android中注入依赖项时出错,java,android,dependency-injection,dagger-2,Java,Android,Dependency Injection,Dagger 2,我正在用Dagger 2学习DI,但是我在依赖注入方面遇到了一些问题,我在这个应用程序中使用MVP,所以我将我的所有类打包 我试图向我的演示者注入依赖项,但我遇到了一个错误“如果没有@Providers注释方法,则无法提供”。我检查了我的代码,并检查了一些示例,我假设我正在注入此依赖项,我尝试了不同的方法,但我无法修复此错误,我不知道如何修复它 只有我想打开第二个活动,调用演示者的SplashActivity,但通过DI注入 格拉德尔图书馆 implementation 'com.google.
implementation 'com.google.dagger:dagger:2.17'
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'
MovieApplication.java
public class MovieApplication extends Application {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public static MovieApplication get(Context context){
return (MovieApplication) context.getApplicationContext();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@ApplicationContext
Context context();
}
@Module
public class AppModule {
private MovieApplication mMovieApplication;
public AppModule(MovieApplication movieApplication) {
this.mMovieApplication = movieApplication;
}
@Provides
@ApplicationContext
Context provideContext(){
return mMovieApplication;
}
@Provides
Application provideApplication(){
return mMovieApplication;
}
}
@MovieScreenScope
@Component(dependencies = AppComponent.class, modules = MovieModule.class)
public interface MovieComponent {
void inject(SplashActivity splashActivity);
}
@Module
public class MovieModule {
private Activity mActivity;
public MovieModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@MovieScreenScope
SplashPresenter<SplashView> provideSplashPresenter(SplashPresenterImpl<SplashView> presenter){
return presenter;
}
}
public class SplashActivity extends BaseActivity implements SplashView {
@Inject
SplashPresenter<SplashView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMovieComponent().inject(this);
presenter.openLoginActivity();
}
@Override
public void openLoginActivity() {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
@Override
public void openHomeActivity() {
startActivity(new Intent(SplashActivity.this, ContainerActivity.class));
finish();
}
}
public class BaseActivity extends AppCompatActivity {
private MovieComponent movieComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupGraph();
}
private void setupGraph() {
movieComponent = DaggerMovieComponent.builder()
.movieModule(new MovieModule(this))
.appComponent(MovieApplication.get(this).getAppComponent())
.build();
}
public MovieComponent getMovieComponent() {
return movieComponent;
}
}
public interface SplashView {
void openLoginActivity();
void openHomeActivity();
}
public class SplashPresenterImpl<V extends SplashView> implements SplashPresenter<V> {
private SplashView splashView;
@Inject
public SplashPresenterImpl(V splashView) {
this.splashView = splashView;
}
@Override
public void openLoginActivity() {
splashView.openLoginActivity();
}
@Override
public void openMainActivity() {
}
@Override
public void verifyInternetConection() {
}
@Override
public void getMoviesData() {
}
}
@MovieScreenScope
public interface SplashPresenter <V extends SplashView> {
void openLoginActivity();
void openMainActivity();
void verifyInternetConection();
void getMoviesData();
}
AppComponent.java
public class MovieApplication extends Application {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public static MovieApplication get(Context context){
return (MovieApplication) context.getApplicationContext();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@ApplicationContext
Context context();
}
@Module
public class AppModule {
private MovieApplication mMovieApplication;
public AppModule(MovieApplication movieApplication) {
this.mMovieApplication = movieApplication;
}
@Provides
@ApplicationContext
Context provideContext(){
return mMovieApplication;
}
@Provides
Application provideApplication(){
return mMovieApplication;
}
}
@MovieScreenScope
@Component(dependencies = AppComponent.class, modules = MovieModule.class)
public interface MovieComponent {
void inject(SplashActivity splashActivity);
}
@Module
public class MovieModule {
private Activity mActivity;
public MovieModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@MovieScreenScope
SplashPresenter<SplashView> provideSplashPresenter(SplashPresenterImpl<SplashView> presenter){
return presenter;
}
}
public class SplashActivity extends BaseActivity implements SplashView {
@Inject
SplashPresenter<SplashView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMovieComponent().inject(this);
presenter.openLoginActivity();
}
@Override
public void openLoginActivity() {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
@Override
public void openHomeActivity() {
startActivity(new Intent(SplashActivity.this, ContainerActivity.class));
finish();
}
}
public class BaseActivity extends AppCompatActivity {
private MovieComponent movieComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupGraph();
}
private void setupGraph() {
movieComponent = DaggerMovieComponent.builder()
.movieModule(new MovieModule(this))
.appComponent(MovieApplication.get(this).getAppComponent())
.build();
}
public MovieComponent getMovieComponent() {
return movieComponent;
}
}
public interface SplashView {
void openLoginActivity();
void openHomeActivity();
}
public class SplashPresenterImpl<V extends SplashView> implements SplashPresenter<V> {
private SplashView splashView;
@Inject
public SplashPresenterImpl(V splashView) {
this.splashView = splashView;
}
@Override
public void openLoginActivity() {
splashView.openLoginActivity();
}
@Override
public void openMainActivity() {
}
@Override
public void verifyInternetConection() {
}
@Override
public void getMoviesData() {
}
}
@MovieScreenScope
public interface SplashPresenter <V extends SplashView> {
void openLoginActivity();
void openMainActivity();
void verifyInternetConection();
void getMoviesData();
}
AppModule.java
public class MovieApplication extends Application {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public static MovieApplication get(Context context){
return (MovieApplication) context.getApplicationContext();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@ApplicationContext
Context context();
}
@Module
public class AppModule {
private MovieApplication mMovieApplication;
public AppModule(MovieApplication movieApplication) {
this.mMovieApplication = movieApplication;
}
@Provides
@ApplicationContext
Context provideContext(){
return mMovieApplication;
}
@Provides
Application provideApplication(){
return mMovieApplication;
}
}
@MovieScreenScope
@Component(dependencies = AppComponent.class, modules = MovieModule.class)
public interface MovieComponent {
void inject(SplashActivity splashActivity);
}
@Module
public class MovieModule {
private Activity mActivity;
public MovieModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@MovieScreenScope
SplashPresenter<SplashView> provideSplashPresenter(SplashPresenterImpl<SplashView> presenter){
return presenter;
}
}
public class SplashActivity extends BaseActivity implements SplashView {
@Inject
SplashPresenter<SplashView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMovieComponent().inject(this);
presenter.openLoginActivity();
}
@Override
public void openLoginActivity() {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
@Override
public void openHomeActivity() {
startActivity(new Intent(SplashActivity.this, ContainerActivity.class));
finish();
}
}
public class BaseActivity extends AppCompatActivity {
private MovieComponent movieComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupGraph();
}
private void setupGraph() {
movieComponent = DaggerMovieComponent.builder()
.movieModule(new MovieModule(this))
.appComponent(MovieApplication.get(this).getAppComponent())
.build();
}
public MovieComponent getMovieComponent() {
return movieComponent;
}
}
public interface SplashView {
void openLoginActivity();
void openHomeActivity();
}
public class SplashPresenterImpl<V extends SplashView> implements SplashPresenter<V> {
private SplashView splashView;
@Inject
public SplashPresenterImpl(V splashView) {
this.splashView = splashView;
}
@Override
public void openLoginActivity() {
splashView.openLoginActivity();
}
@Override
public void openMainActivity() {
}
@Override
public void verifyInternetConection() {
}
@Override
public void getMoviesData() {
}
}
@MovieScreenScope
public interface SplashPresenter <V extends SplashView> {
void openLoginActivity();
void openMainActivity();
void verifyInternetConection();
void getMoviesData();
}
MovieComponent.java
public class MovieApplication extends Application {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public static MovieApplication get(Context context){
return (MovieApplication) context.getApplicationContext();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@ApplicationContext
Context context();
}
@Module
public class AppModule {
private MovieApplication mMovieApplication;
public AppModule(MovieApplication movieApplication) {
this.mMovieApplication = movieApplication;
}
@Provides
@ApplicationContext
Context provideContext(){
return mMovieApplication;
}
@Provides
Application provideApplication(){
return mMovieApplication;
}
}
@MovieScreenScope
@Component(dependencies = AppComponent.class, modules = MovieModule.class)
public interface MovieComponent {
void inject(SplashActivity splashActivity);
}
@Module
public class MovieModule {
private Activity mActivity;
public MovieModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@MovieScreenScope
SplashPresenter<SplashView> provideSplashPresenter(SplashPresenterImpl<SplashView> presenter){
return presenter;
}
}
public class SplashActivity extends BaseActivity implements SplashView {
@Inject
SplashPresenter<SplashView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMovieComponent().inject(this);
presenter.openLoginActivity();
}
@Override
public void openLoginActivity() {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
@Override
public void openHomeActivity() {
startActivity(new Intent(SplashActivity.this, ContainerActivity.class));
finish();
}
}
public class BaseActivity extends AppCompatActivity {
private MovieComponent movieComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupGraph();
}
private void setupGraph() {
movieComponent = DaggerMovieComponent.builder()
.movieModule(new MovieModule(this))
.appComponent(MovieApplication.get(this).getAppComponent())
.build();
}
public MovieComponent getMovieComponent() {
return movieComponent;
}
}
public interface SplashView {
void openLoginActivity();
void openHomeActivity();
}
public class SplashPresenterImpl<V extends SplashView> implements SplashPresenter<V> {
private SplashView splashView;
@Inject
public SplashPresenterImpl(V splashView) {
this.splashView = splashView;
}
@Override
public void openLoginActivity() {
splashView.openLoginActivity();
}
@Override
public void openMainActivity() {
}
@Override
public void verifyInternetConection() {
}
@Override
public void getMoviesData() {
}
}
@MovieScreenScope
public interface SplashPresenter <V extends SplashView> {
void openLoginActivity();
void openMainActivity();
void verifyInternetConection();
void getMoviesData();
}
MovieModule.java
public class MovieApplication extends Application {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public static MovieApplication get(Context context){
return (MovieApplication) context.getApplicationContext();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@ApplicationContext
Context context();
}
@Module
public class AppModule {
private MovieApplication mMovieApplication;
public AppModule(MovieApplication movieApplication) {
this.mMovieApplication = movieApplication;
}
@Provides
@ApplicationContext
Context provideContext(){
return mMovieApplication;
}
@Provides
Application provideApplication(){
return mMovieApplication;
}
}
@MovieScreenScope
@Component(dependencies = AppComponent.class, modules = MovieModule.class)
public interface MovieComponent {
void inject(SplashActivity splashActivity);
}
@Module
public class MovieModule {
private Activity mActivity;
public MovieModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@MovieScreenScope
SplashPresenter<SplashView> provideSplashPresenter(SplashPresenterImpl<SplashView> presenter){
return presenter;
}
}
public class SplashActivity extends BaseActivity implements SplashView {
@Inject
SplashPresenter<SplashView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMovieComponent().inject(this);
presenter.openLoginActivity();
}
@Override
public void openLoginActivity() {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
@Override
public void openHomeActivity() {
startActivity(new Intent(SplashActivity.this, ContainerActivity.class));
finish();
}
}
public class BaseActivity extends AppCompatActivity {
private MovieComponent movieComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupGraph();
}
private void setupGraph() {
movieComponent = DaggerMovieComponent.builder()
.movieModule(new MovieModule(this))
.appComponent(MovieApplication.get(this).getAppComponent())
.build();
}
public MovieComponent getMovieComponent() {
return movieComponent;
}
}
public interface SplashView {
void openLoginActivity();
void openHomeActivity();
}
public class SplashPresenterImpl<V extends SplashView> implements SplashPresenter<V> {
private SplashView splashView;
@Inject
public SplashPresenterImpl(V splashView) {
this.splashView = splashView;
}
@Override
public void openLoginActivity() {
splashView.openLoginActivity();
}
@Override
public void openMainActivity() {
}
@Override
public void verifyInternetConection() {
}
@Override
public void getMoviesData() {
}
}
@MovieScreenScope
public interface SplashPresenter <V extends SplashView> {
void openLoginActivity();
void openMainActivity();
void verifyInternetConection();
void getMoviesData();
}
SplashView.java
public class MovieApplication extends Application {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public static MovieApplication get(Context context){
return (MovieApplication) context.getApplicationContext();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@ApplicationContext
Context context();
}
@Module
public class AppModule {
private MovieApplication mMovieApplication;
public AppModule(MovieApplication movieApplication) {
this.mMovieApplication = movieApplication;
}
@Provides
@ApplicationContext
Context provideContext(){
return mMovieApplication;
}
@Provides
Application provideApplication(){
return mMovieApplication;
}
}
@MovieScreenScope
@Component(dependencies = AppComponent.class, modules = MovieModule.class)
public interface MovieComponent {
void inject(SplashActivity splashActivity);
}
@Module
public class MovieModule {
private Activity mActivity;
public MovieModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@MovieScreenScope
SplashPresenter<SplashView> provideSplashPresenter(SplashPresenterImpl<SplashView> presenter){
return presenter;
}
}
public class SplashActivity extends BaseActivity implements SplashView {
@Inject
SplashPresenter<SplashView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMovieComponent().inject(this);
presenter.openLoginActivity();
}
@Override
public void openLoginActivity() {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
@Override
public void openHomeActivity() {
startActivity(new Intent(SplashActivity.this, ContainerActivity.class));
finish();
}
}
public class BaseActivity extends AppCompatActivity {
private MovieComponent movieComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupGraph();
}
private void setupGraph() {
movieComponent = DaggerMovieComponent.builder()
.movieModule(new MovieModule(this))
.appComponent(MovieApplication.get(this).getAppComponent())
.build();
}
public MovieComponent getMovieComponent() {
return movieComponent;
}
}
public interface SplashView {
void openLoginActivity();
void openHomeActivity();
}
public class SplashPresenterImpl<V extends SplashView> implements SplashPresenter<V> {
private SplashView splashView;
@Inject
public SplashPresenterImpl(V splashView) {
this.splashView = splashView;
}
@Override
public void openLoginActivity() {
splashView.openLoginActivity();
}
@Override
public void openMainActivity() {
}
@Override
public void verifyInternetConection() {
}
@Override
public void getMoviesData() {
}
}
@MovieScreenScope
public interface SplashPresenter <V extends SplashView> {
void openLoginActivity();
void openMainActivity();
void verifyInternetConection();
void getMoviesData();
}
SplashPresenter.java
public class MovieApplication extends Application {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public static MovieApplication get(Context context){
return (MovieApplication) context.getApplicationContext();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@ApplicationContext
Context context();
}
@Module
public class AppModule {
private MovieApplication mMovieApplication;
public AppModule(MovieApplication movieApplication) {
this.mMovieApplication = movieApplication;
}
@Provides
@ApplicationContext
Context provideContext(){
return mMovieApplication;
}
@Provides
Application provideApplication(){
return mMovieApplication;
}
}
@MovieScreenScope
@Component(dependencies = AppComponent.class, modules = MovieModule.class)
public interface MovieComponent {
void inject(SplashActivity splashActivity);
}
@Module
public class MovieModule {
private Activity mActivity;
public MovieModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@MovieScreenScope
SplashPresenter<SplashView> provideSplashPresenter(SplashPresenterImpl<SplashView> presenter){
return presenter;
}
}
public class SplashActivity extends BaseActivity implements SplashView {
@Inject
SplashPresenter<SplashView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMovieComponent().inject(this);
presenter.openLoginActivity();
}
@Override
public void openLoginActivity() {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
@Override
public void openHomeActivity() {
startActivity(new Intent(SplashActivity.this, ContainerActivity.class));
finish();
}
}
public class BaseActivity extends AppCompatActivity {
private MovieComponent movieComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupGraph();
}
private void setupGraph() {
movieComponent = DaggerMovieComponent.builder()
.movieModule(new MovieModule(this))
.appComponent(MovieApplication.get(this).getAppComponent())
.build();
}
public MovieComponent getMovieComponent() {
return movieComponent;
}
}
public interface SplashView {
void openLoginActivity();
void openHomeActivity();
}
public class SplashPresenterImpl<V extends SplashView> implements SplashPresenter<V> {
private SplashView splashView;
@Inject
public SplashPresenterImpl(V splashView) {
this.splashView = splashView;
}
@Override
public void openLoginActivity() {
splashView.openLoginActivity();
}
@Override
public void openMainActivity() {
}
@Override
public void verifyInternetConection() {
}
@Override
public void getMoviesData() {
}
}
@MovieScreenScope
public interface SplashPresenter <V extends SplashView> {
void openLoginActivity();
void openMainActivity();
void verifyInternetConection();
void getMoviesData();
}
公共类SplashPresenterImpl实现SplashPresenter{
私人SplashView SplashView;
@注入
公共SplashPresenterImpl(V splashView){
this.splashView=splashView;
}
@凌驾
public void openLoginActivity(){
splashView.openLoginActivity();
}
@凌驾
公共活动(){
}
@凌驾
公共无效验证互联网连接(){
}
@凌驾
public void getMoviesData(){
}
}
SplashPresenter.java
public class MovieApplication extends Application {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public static MovieApplication get(Context context){
return (MovieApplication) context.getApplicationContext();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
@ApplicationContext
Context context();
}
@Module
public class AppModule {
private MovieApplication mMovieApplication;
public AppModule(MovieApplication movieApplication) {
this.mMovieApplication = movieApplication;
}
@Provides
@ApplicationContext
Context provideContext(){
return mMovieApplication;
}
@Provides
Application provideApplication(){
return mMovieApplication;
}
}
@MovieScreenScope
@Component(dependencies = AppComponent.class, modules = MovieModule.class)
public interface MovieComponent {
void inject(SplashActivity splashActivity);
}
@Module
public class MovieModule {
private Activity mActivity;
public MovieModule(Activity activity) {
this.mActivity = activity;
}
@Provides
@ActivityContext
Context provideContext(){
return mActivity;
}
@Provides
Activity provideActivity(){
return mActivity;
}
@Provides
@MovieScreenScope
SplashPresenter<SplashView> provideSplashPresenter(SplashPresenterImpl<SplashView> presenter){
return presenter;
}
}
public class SplashActivity extends BaseActivity implements SplashView {
@Inject
SplashPresenter<SplashView> presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMovieComponent().inject(this);
presenter.openLoginActivity();
}
@Override
public void openLoginActivity() {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
@Override
public void openHomeActivity() {
startActivity(new Intent(SplashActivity.this, ContainerActivity.class));
finish();
}
}
public class BaseActivity extends AppCompatActivity {
private MovieComponent movieComponent;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupGraph();
}
private void setupGraph() {
movieComponent = DaggerMovieComponent.builder()
.movieModule(new MovieModule(this))
.appComponent(MovieApplication.get(this).getAppComponent())
.build();
}
public MovieComponent getMovieComponent() {
return movieComponent;
}
}
public interface SplashView {
void openLoginActivity();
void openHomeActivity();
}
public class SplashPresenterImpl<V extends SplashView> implements SplashPresenter<V> {
private SplashView splashView;
@Inject
public SplashPresenterImpl(V splashView) {
this.splashView = splashView;
}
@Override
public void openLoginActivity() {
splashView.openLoginActivity();
}
@Override
public void openMainActivity() {
}
@Override
public void verifyInternetConection() {
}
@Override
public void getMoviesData() {
}
}
@MovieScreenScope
public interface SplashPresenter <V extends SplashView> {
void openLoginActivity();
void openMainActivity();
void verifyInternetConection();
void getMoviesData();
}
@MovieScreenScope
公共界面演示者{
void openLoginActivity();
void openmain活动();
无效验证Internet连接();
void getMoviesData();
}
这里唯一的问题似乎是SplashPresenterImpl
类的构造函数中的splashView
参数。当使用dagger创建SplashPresenterImpl
的对象时,它会尝试查找返回SplashView
的@提供的方法。基本上,它试图在依赖关系图中找到SplashView
,由于没有使用@Provides注释的方法返回此对象,因此会出现此错误