Dagger2 Инъекция в класс, который расширяет абстрактную активность и имеет приложение, расширяющее приложение из библиотеки. - PullRequest
0 голосов
/ 27 января 2019

У меня есть библиотека с абстрактными BaseActivity и BaseApplication, которые расширены в модуле проекта.ApplicationModule и ApplicationComponent существуют в библиотечном модуле, когда я пытаюсь внедрить объект в MainActivity, который расширяет BaseActivity, я получаю исключение нулевого указателя.

Это в библиотечном модуле

@Component(modules = ApplicationModule.class)
@Singleton
public interface ApplicationComponent {

    void inject(BaseActivity baseActivity);

    @Component.Builder
    interface Builder {

        @BindsInstance
        Builder application(Application application);

        ApplicationComponent build();

    }
}

Также в библиотечном модуле

@Module
public class ApplicationModule {

    @Singleton
    @Provides
    User provideUser() {
        return  new User("Unknown","abc@xyz.com");
    }
}

Приложение библиотеки

public abstract class BaseApplication extends Application {

    private ApplicationComponent mApplicationComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        mApplicationComponent = DaggerApplicationComponent
                .builder()
                .application(this)
                .build();
    }

    public ApplicationComponent getApplicationComponent() {
        return mApplicationComponent;
    }
}


public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ((BaseApplication) getApplication()).getApplicationComponent().inject(this);


}

Активность проекта

public class MainActivity extends BaseActivity {

    @Inject
    User user;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        user.setName("New User");
        System.out.println("MainActivity user: " + user.getName() + ", email: " + user.getEmail());

    }
}

Пользователь возвращает значение NULL, когда я пытаюсь внедрить его в MainActivity, расширяющую BaseActivity.Когда я внедряю пользователя в BaseActivity, он работает нормально.

...