【问题标题】:How to inject the activity with every thing loaded?如何在加载所有内容时注入活动?
【发布时间】:2025-11-27 04:50:02
【问题描述】:

我想将我的活动类注入到另一个第三方类中,如下所示,

public class LoginPresenter implements ILoginPresenter {
@Inject
LoginActivity view;
public void attemptLogin(String username, String password) {
if (view.getUserName().isEmpty()) {
//"view" here is always null, I dont know how to correctly inject it.
        view.showUserNameEmptyError(R.string.USER_NAME_EMPTY_ERROR);
        return;
    }
}

这是我的 appModule 类,它在这里为我提供了一个很大的上下文,

@Module
public class AppModule {
static Application mApplication;

public AppModule(Application application) {
    mApplication = application;

}

@Provides
@Singleton
Application providesApplication() {

    return mApplication;
}
}

我可以将上述上下文转换为其中一个活动,转换为我的类的构造函数吗?如果可以的话,我应该为它定义另一个提供者吗?

这是我的组件

@Singleton
@Component(modules = {AppModule.class, NetModule.class})
public interface NetComponent {

    void inject(LoginPresenter presenter);

    void inject(ILoginPresenter presenter);
}

更新: 我将此构造函数和提供程序添加到我的 Appmodule 中

public AppModule(Application application, LoginActivity loginActivity) {
  this.application = application;
  this.loginActivity = loginActivity;
}

但我不知道如何传递参数来构建组件

【问题讨论】:

    标签: java android dependency-injection dagger-2


    【解决方案1】:

    您将需要添加另一个提供程序方法。

    @Module
    public class AppModule {
      private final Application application;
      private final LoginActivity loginActivity;
    
      public AppModule(Application application, LoginActivity loginActivity) {
        this.application = application;
        this.loginActivity = loginActivity;
      }
    
      @Provides
      @Singleton
      Application providesApplication() {
        return mApplication;
      }
    
      @Provides
      @Singleton
      LoginActivity provideLoginActivity() {
        return loginActivity;
      }
    }
    

    【讨论】:

    • 但我将如何传递上下文? DaggerNetComponent.builder() .appModule(new AppModule(this,/*我应该在这里做什么?*/))
    • 您必须在 LoginActivity 中构建您的 AppModule,并为第二个参数添加“this”。
    • 谢谢,但是我会如何处理第一个参数,我更新了我的问题
    • 你可以做 (Application) getApplicationContext();
    最近更新 更多