有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在安卓中使用MVP层之间的注入?

我最近一直在我的项目中使用匕首2

问题是当我试图构建我的项目时,演示者在我的登录名中 如下图所示注入的活动为空

当我试图建立这个项目的时候

如果没有@Inject构造函数或@Provides-或@products注释方法,则无法提供演示者

我不明白我做错了什么??,请有人帮我做这个

提前谢谢

这是我的登录活动,这里的演示者为空,这表明我没有正确地注入它

@Inject
LoginPresenter presenter;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    InjectHelper.getRootComponent().injectPresenter(this);
    presenter.setProgressBarVisiblity(View.INVISIBLE);
}

这是我的演示者模块

 @Module
 public class PresenterModule {
 private final LoginActivity activity;

public PresenterModule(LoginActivity activity) {
    this.activity = activity;
}

@Provides
@Singleton
public LoginActivity providesView() {

    return activity;
}
}


@Provides
@Singleton
public LoginPresenter providesPresenter()
{
    return new LoginPresenter();
}
}

这是一个注入助手类

public class InjectHelper {
  private static RootComponent sRootComponent;

static {
    initModules();
}

private static void initModules() {
    sRootComponent = getRootComponentBuilder().build();
}

public static DaggerRootComponent.Builder getRootComponentBuilder() {
    return DaggerRootComponent.builder();
}

public static RootComponent getRootComponent() {
    if (sRootComponent == null) {
        initModules();
    }
    return sRootComponent;
}

}

这是根组件类

@Singleton
@Component(modules = {
     PresenterModule.class
})
public interface RootComponent {
void injectLoginView(LoginPresenter loginPresenter);
}

共 (2) 个答案

  1. # 1 楼答案

    @Singleton
    @Component(modules = {PresenterModule.class})
    public interface RootComponent {
        void inject(LoginActivity activity);
    }
    
  2. # 2 楼答案

    您需要在组件中通知dagger哪些视图要使用注入。 您必须将组件中的注入函数代码更改为:

        void inject(LoginActivity activity);
    

    要显示dagger所需的内容,需要使用@dagger注释,而不是将其作为组件文件中的注入函数发送。正如你所做的那样:

    @Inject
    LoginPresenter presenter;
    

    Dagger将在您的模块中搜索LoginPresenter类型的变量,并使用该类型找到适当的提供程序方法

    您在组件中作为“inject”函数的参数输入的内容告诉Dagger您将在哪个视图中进行注入(而不是要注入什么)