加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Dagger 2没有初始化变量

发布时间:2020-12-15 02:13:33 所属栏目:Java 来源:网络整理
导读:现在我正在尝试在我的项目中实施匕首,我有一个问题.在应用程序组件中初始化的变量未在我的活动中初始化.这是我的代码. 应用: public class MyApplication extends Application { private ApplicationComponent applicationComponent; @Inject public Contex
现在我正在尝试在我的项目中实施匕首,我有一个问题.在应用程序组件中初始化的变量未在我的活动中初始化.这是我的代码.
应用:

public class MyApplication extends Application {
    private ApplicationComponent applicationComponent;
    @Inject
    public Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        applicationComponent = DaggerApplicationComponent.builder().applicationModule(new ApplicationModule(this)).build();
        applicationComponent.inject(this);
    }

    public ApplicationComponent getApplicationComponent() {
        return applicationComponent;
    }
}

这里变量context!= null

活动:

public class MainActivity extends AppCompatActivity {
    private ActivityComponent activityComponent;
    @Inject
    Context context;

    @Override
    protected void onStart() {
        super.onStart();
        activityComponent = DaggerActivityComponent.builder()
                .activityModule(new ActivityModule(this))
                .applicationComponent(((MyApplication) getApplication()).getApplicationComponent())
                .build();
        activityComponent.inject(this);
    }
}

这里context == null.

匕首:

@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
    void inject(MyApplication application);
    Context getApplicationContext();
}

@Component(modules = {ActivityModule.class},dependencies = {ApplicationComponent.class})
public interface ActivityComponent {
    void inject(MainActivity mainActivity);
}

@Module
public class ApplicationModule {
    private Application application;

    public ApplicationModule(MyApplication application) {
        this.application = application;
    }

    @Provides
    Context provideApplicationContext() {
        return application.getApplicationContext();
    }
}

@Module
public class ActivityModule {
    Activity activity;

    public ActivityModule(MainActivity activity) {
        this.activity = activity;
    }
}

因此,dagger仅在应用程序类中提供“Context”,但不在MainActivity类中提供它.我做错了什么?可能是我要改变一些东西.

谢谢!

解决方法

设置如下:

public class MyApplication extends Application {
  private ApplicationComponent applicationComponent;

  @Override
  public void onCreate() {
    super.onCreate();
    applicationComponent = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule(this))
            .build();
  }

  public ApplicationComponent getApplicationComponent() {
    return applicationComponent;
  }
}

和你的活动:

public class MainActivity extends AppCompatActivity {

  @Inject
  Context context;

  @Override
  protected void onStart() {
    super.onStart();
    ((MyApplication) getApplication()).getApplicationComponent().inject(this);
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读