2016-06-02 4 views
0

Нужна помощь в понимании того, почему Splash Presenter возвращается как null. Я следую чистой архитектуре.Кинжал 2: Presenter is null

public class SplashActivity extends BaseActivity implements HasComponent<LoginComponent> { 

    @Inject 
    SplashPresenter splashPresenter; 

    private LoginComponent loginComponent; 


    @Override protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     //setContentView(R.layout.spla); 

     this.initializeInjector(); 
     if (savedInstanceState == null) { 
      // addFragment(R.id.fragmentContainer, new UserListFragment()); 
     } 

     splashPresenter.initialize(); 
    } 

    private void initializeInjector() { 
     this.loginComponent = DaggerLoginComponent.builder() 
       .applicationComponent(getApplicationComponent()) 
       .activityModule(getActivityModule()) 
       .loginModule(new LoginModule()) 
       .build(); 
    } 

    @Override 
    public LoginComponent getComponent() { 
     return loginComponent; 
    } 
} 

В моей деятельности SplashPresenter всегда имеет значение null.

Вот Компонентный активность

@PerActivity 
@Component(dependencies = ApplicationComponent.class, modules = ActivityModule.class) 
public interface ActivityComponent { 
    //Exposed to sub-graphs. 
    Activity activity(); 
} 

@Module 
public class ActivityModule { 
    private final Activity activity; 

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

    /** 
    * Expose the activity to dependents in the graph. 
    */ 
    @Provides @PerActivity Activity activity() { 
    return this.activity; 
    } 
} 

Вот мой LoginComponent

@PerActivity 
    @Component(dependencies = ApplicationComponent.class, modules = {ActivityModule.class, LoginModule.class}) 
    public interface LoginComponent extends ActivityComponent { 


} 

Здесь LoginModule

@Module 
public class LoginModule { 

    private User user; 

    public LoginModule(){} 

    public LoginModule(User user){this.user = user;} 

    @Provides 
    LoginRepository provideLoginRepository(LoginDataRepository loginRepository) { 
    return loginRepository; 
    } 


    @Provides 
    @PerActivity 
    @Named("isUserLoggedIn") 
    UseCase provideIsUserLoggedInUseCase(IsUserLoggedIn isUserLoggedIn){ 
     return isUserLoggedIn; 
    } 

    @Provides 
    @PerActivity 
    @Named("login") 
    UseCase provideLoginUseCase(LoginRepository loginRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread){ 
     return new Login(user,loginRepository,threadExecutor,postExecutionThread); 
    } 

    @Provides 
    @PerActivity 
    @Named("logOut") 
    UseCase provideLogoutUseCase(LoginRepository loginRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread){ 
     return new LogOut(user,loginRepository,threadExecutor,postExecutionThread); 
    } 
} 

В BaseActivity я делаю следующее

public abstract class BaseActivity extends Activity { 

    @Inject Navigator navigator; 

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

    protected ActivityModule getActivityModule() { 
    return new ActivityModule(this); 
    } 

} 

Тем не менее я не могу понять, почему мой ведущий нуль в SplashActivity

Вот мой Всплеск Presenter

@PerActivity 
public class SplashPresenter implements Presenter { 

    private final UseCase isUserLoggedIn; 

    private SplashView splashView; 

    @Inject 
    public SplashPresenter(@Named("isUserLoggedIn") UseCase isUserLoggedIn) { 
     this.isUserLoggedIn = isUserLoggedIn; 
    } 
} 
+1

Вы нашли решение на этом? Такая же проблема здесь :( – Zain

+0

Пожалуйста, пост решение, если вы смогли успешно решить эту проблему. – Talha

ответ

0

экземпляр loginComponent создает после inject method.

переместите инициализатор компонента в пользовательский класс приложения. Или перейти к компоненту инициализатору к BaseActivity, inject method к SlashActivity

И делает inject declaration каждую активность, которую вы хотите придать экземпляр в интерфейсе компоненты.

+0

Тем не менее такой же вопрос, попытался это общественного абстрактного класса BaseActivity { @Override защищен недействительным OnCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); initializeInjector();. this.getApplicationComponent() инъекции (это); } частный loginComponent loginComponent; частная пустота initializeInjector() { this.loginComponent = DaggerLoginComponent.builder() .applicationComponent (скачать приложение licationComponent()) .activityModule (getActivityModule()) .loginModule (new LoginModule()) .build(); } – Signcodeindie

Смежные вопросы