Android 当我尝试打开新活动时,当使用匕首2时,这是=null

Android 当我尝试打开新活动时,当使用匕首2时,这是=null,android,mvp,dagger-2,Android,Mvp,Dagger 2,这是我的mvp模块 @Module public class LoginModule { @Provides public LoginPresenterImpl providePresenter(LoginView loginView , LoginInteractor loginInteractor) { return new LoginPresenterImpl(loginView,loginInteractor); } @Provide

这是我的mvp模块

@Module
public class LoginModule {

    @Provides
    public LoginPresenterImpl providePresenter(LoginView loginView , LoginInteractor loginInteractor) {

        return new LoginPresenterImpl(loginView,loginInteractor);
    }

    @Provides
    public LoginView loginView(){

        return new LoginActivity();
    }

    @Provides
    public LoginInteractor loginInteractor(Repository repository){

        return new LoginInteractorImpl(repository);
    }

    @Provides
    public Repository provideRepository(APIInterfaces.LoginInterface loginInterface){
        return new Repository(loginInterface,loginView());
    }

    @Provides
    public LoginPresenter loginPresenter(APIInterfaces.LoginInterface loginInterface){

        return providePresenter(loginView(),loginInteractor(provideRepository(loginInterface)));
    }
}
这是我的登录活动

{
ProgressHUD progressHUD;
private LinearLayout main_layout;
private boolean flag = false;



private EditText email_edt, password_edt;
private ImageView login_btn;
private TextView sign_up_tv, forget_password_tv;
@Inject
public LoginPresenter loginPresenter;

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    //getWindow().setStatusBarColor(Color.TRANSPARENT);
    //        flag = getIntent().getBooleanExtra("from_splash", false);
    //        loginPresenter = new LoginPresenterImpl(this,new LoginInteractorImpl());

    MyApplication.getComponent().inject(this);

    setControls();


}   //  onCreate()

@Override
protected void onDestroy() {
    loginPresenter.onDestroy();
    super.onDestroy();
}

private void setControls() {
    main_layout =  findViewById(R.id.main_login_layout);
    email_edt =  findViewById(R.id.edt_txt_email);
    password_edt =  findViewById(R.id.edt_txt_password);
    sign_up_tv =  findViewById(R.id.sign_up_txt);
    forget_password_tv =  findViewById(R.id.forget_password_txt);
    login_btn =  findViewById(R.id.login_btn);

    login_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            loginPresenter.validateEmailPassword(email_edt.getText().toString().trim(),password_edt.getText().toString().trim());
        }
    });

    sign_up_tv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            loginPresenter.openRegistrationPage();
        }
    });

    forget_password_tv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });

    if(flag)
        Logging.Snackbar(main_layout, getString(R.string.check_internet_msg));


}   //  setControls()

@Override
public void showProgress() {
    //progressHUD = ProgressHUD.show(LoginActivity.this, getString(R.string.loading_txt), false, null, null);
}

@Override
public void hideProgress() {
    //progressHUD.dismiss();
}

@Override
public void passwordError(int x) {

    switch (x)
    {
        case 0 :
            password_edt.setError(getString(R.string.password_length_error_msg));
            break;
        case 1 :
            password_edt.setError(getString(R.string.empty_field_error_msg));
            break;

    }
}

@Override
public void emailError(int y) {
    switch (y)
    {
        case 0 :
            email_edt.setError(getString(R.string.empty_field_error_msg));
            break;

        case 1 :
            email_edt.setError(getString(R.string.invalid_email_error_msg));
            break;
        case 2 :
            email_edt.setError(getString(R.string.invalid_email_error_msg));
            break;
    }

}

@Override
public void openRegistration() {
    Intent intent = new Intent(LoginActivity.this, RegistrationActivity.class);
    startActivity(intent);
    finish();
}

@Override
public void forgetPassword() {

}

@Override
public void navigateToHome(Response<LoginResponse> response) {

    if (response.body().getError() == 0 && response.body().getMessage().equalsIgnoreCase("Login Success"))
    {

        UserData userData = new UserData();

       Intent intent = new Intent(this,MainPageActivity.class);

        userData = response.body().getData();
        intent.putExtra("UserData",userData);

        startActivity(intent);
        finish();
    }
    else
    {
        Logging.Toast(this,response.body().getMessage());
    }

}

@Override
public void onError() {

    Logging.Toast(this,"Check Your Internet Connection");
}
}
{
ProgressHUD ProgressHUD;
专用线路布局主要布局图;
私有布尔标志=false;
私人编辑文本电子邮件、密码;
私有ImageView登录\u btn;
私人文本视图注册电视,忘记密码电视;
@注入
公共登录Presenter登录Presenter;
@TargetApi(Build.VERSION\u code.LOLLIPOP)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
//getWindow().setStatusBarColor(Color.TRANSPARENT);
//flag=getIntent().getBooleanExtra(“from_splash”,false);
//loginPresenter=新的LoginPresentImpl(这是新的LoginInteractorImpl());
MyApplication.getComponent().inject(此);
setControls();
}//onCreate()
@凌驾
受保护的空onDestroy(){
loginPresenter.ondestory();
super.ondestory();
}
私有void setControls(){
main\u layout=findviewbyd(R.id.main\u login\u layout);
email\u edt=findviewbyd(R.id.edt\u txt\u email);
password\u edt=findviewbyd(R.id.edt\u txt\u密码);
sign\u-up\u-tv=findviewbyd(R.id.sign\u-up\u-txt);
忘记密码\u tv=findviewbyd(R.id.forget\u password\u txt);
login\u btn=findviewbyd(R.id.login\u btn);
login_btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
loginPresenter.validateEmailPassword(email_edt.getText().toString().trim(),password_edt.getText().toString().trim());
}
});
注册\u tv.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
loginPresenter.openRegistrationPage();
}
});
忘记\u密码\u tv.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
}
});
国际单项体育联合会(旗)
Snackbar(main_布局,getString(R.string.check_internet_msg));
}//setControls()
@凌驾
公共服务进展{
//progressHUD=progressHUD.show(LoginActivity.this、getString(R.string.loading_txt)、false、null、null);
}
@凌驾
public void hideProgress(){
//progressHUD.discouse();
}
@凌驾
公共无效密码错误(int x){
开关(x)
{
案例0:
密码_edt.setError(getString(R.string.password_length_error_msg));
打破
案例1:
密码_edt.setError(getString(R.string.empty_field_error_msg));
打破
}
}
@凌驾
公共无效电子邮件错误(整数y){
开关(y)
{
案例0:
email_edt.setError(getString(R.string.empty_field_error_msg));
打破
案例1:
email_edt.setError(getString(R.string.invalid_email_error_msg));
打破
案例2:
email_edt.setError(getString(R.string.invalid_email_error_msg));
打破
}
}
@凌驾
公开注册(){
意向意向=新意向(LoginActivity.this、RegistrationActivity.class);
星触觉(意向);
完成();
}
@凌驾
公开作废伪造密码(){
}
@凌驾
公共void navigateToHome(响应){
if(response.body().getError()==0&&response.body().getMessage().equalsIgnoreCase(“登录成功”))
{
UserData UserData=新的UserData();
意向意向=新意向(此,MainPageActivity.class);
userData=response.body().getData();
intent.putExtra(“UserData”,UserData);
星触觉(意向);
完成();
}
其他的
{
Toast(这是response.body().getMessage());
}
}
@凌驾
公开无效{
Toast(这是“检查您的Internet连接”);
}
}
当我尝试导航到home activity LoginActivity.return null时,如何解决此问题。 这就是我得到的错误 java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String android.content.Context.getPackageName()” 位于android.content.ContextWrapper.getPackageName(ContextWrapper.java:141)

我通过像这样编辑MVP模块解决了这个问题

公共类登录模块{

private LoginView loginView;

public LoginModule(LoginView loginView) {
    this.loginView = loginView;
}


@ActivityScope
@Provides
public LoginPresenterImpl providePresenter(LoginView loginView , LoginInteractor loginInteractor) {

    return new LoginPresenterImpl(loginView,loginInteractor);
}

@ActivityScope
@Provides
public LoginView loginView(){
    return loginView;
}


@ActivityScope
@Provides
public LoginInteractor loginInteractor(Repository repository){

    return new LoginInteractorImpl(repository);
}


@ActivityScope
@Provides
public Repository provideRepository(APIInterfaces.LoginInterface loginInterface,APIInterfaces.getEventsInterface getEventsInterface){
    return new Repository(loginInterface,getEventsInterface);
}


@ActivityScope
@Provides
public LoginPresenter loginPresenter(APIInterfaces.LoginInterface loginInterface,APIInterfaces.getEventsInterface getEventsInterface){
    return providePresenter(loginView(),loginInteractor(provideRepository(loginInterface,getEventsInterface)));
}
}

并为其创建活动范围


还有一个。。。。您不应该使用运算符new创建从活动派生的类的实例。您的意思是没有答案吗?他/她指的是这一行:return new LoginActivity();android中的活动不应该使用新关键字进行实例化。谢谢,我解决了这个问题
private LoginView loginView;

public LoginModule(LoginView loginView) {
    this.loginView = loginView;
}


@ActivityScope
@Provides
public LoginPresenterImpl providePresenter(LoginView loginView , LoginInteractor loginInteractor) {

    return new LoginPresenterImpl(loginView,loginInteractor);
}

@ActivityScope
@Provides
public LoginView loginView(){
    return loginView;
}


@ActivityScope
@Provides
public LoginInteractor loginInteractor(Repository repository){

    return new LoginInteractorImpl(repository);
}


@ActivityScope
@Provides
public Repository provideRepository(APIInterfaces.LoginInterface loginInterface,APIInterfaces.getEventsInterface getEventsInterface){
    return new Repository(loginInterface,getEventsInterface);
}


@ActivityScope
@Provides
public LoginPresenter loginPresenter(APIInterfaces.LoginInterface loginInterface,APIInterfaces.getEventsInterface getEventsInterface){
    return providePresenter(loginView(),loginInteractor(provideRepository(loginInterface,getEventsInterface)));
}