【问题标题】:Android: Why can't I move to another Acivity by using “Intent”?Android:为什么我不能使用“Intent”移动到另一个Activity?
【发布时间】:2019-06-07 08:40:20
【问题描述】:

我无法转到 LoginPageActivity。我认为问题出在我的“意图”声明中。也许,我给出了错误的“上下文”。一切看起来都很好。但是应用程序很糟糕。我找不到问题。你能帮助我吗?我应该在 MainActivity 和 ELSE 语句中给出什么作为上下文?

我认为问题在于 Helper 类中的 Intent。

我有这样的 IF 条件:

public void createNewUser(final Context context, String email, String password){
        firebaseAuth = FirebaseAuth.getInstance();
        firebaseAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener((Activity) context, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (!task.isSuccessful()) {
                        ShortCut.displayMessageToast(context,  "invalid info");
                    }else {
                        ShortCut.displayMessageToast(context, "Account created");
                        Intent loginIntent = new Intent(context, LoginPageActivity.class);
                        context.startActivity(loginIntent);
                    }
                }
            });
}

当我尝试创建新帐户时,我的 else 条件有效。但是,为什么我不能移动到 LoginPageActivity?

而且,我在 MainActivity 中从这里调用:

@OnClick(R.id.createBtn)
void createButonClicked(){

    String email = mEmail.getText().toString();
    String password = mPassword.getText().toString();
    String clientName = mClientName.getText().toString();
    String clientSurname = mClientSurname.getText().toString();
    String clientCity = mClientCity.getText().toString();
    String clientPhone = mClientPhone.getText().toString();
    if (TextUtils.isEmpty(email)
            || TextUtils.isEmpty(password)
            || TextUtils.isEmpty(clientName)
            || TextUtils.isEmpty(clientSurname)
            || TextUtils.isEmpty(clientCity)
            || TextUtils.isEmpty(clientPhone))
    {
        ShortCut.displayMessageToast(this, "You should fill empty fields!");

    }else {

        firebaseApplication = new FirebaseApplication();
        firebaseApplication.createNewUser(this, email, password);
        ShortCut.displayMessageToast(this, "just for a debug");
    }
}

【问题讨论】:

标签: android firebase android-intent firebase-authentication


【解决方案1】:

当您调用方法“createNewUser()”时,您处于 onClickListener 内部。当您将“this”作为您的上下文传递时,您正在传递您的侦听器的上下文。相反,在调用 createNewUser 时,使用“MainActivity.this”作为您的 Context,这样您的应用就知道该上下文是整个活动,而不仅仅是侦听器。这意味着代码应该是

}else {

    firebaseApplication = new FirebaseApplication();
    firebaseApplication.createNewUser(MainActivity.this, email, password);
    ShortCut.displayMessageToast(this, "just for a debug");
}

【讨论】:

  • “firebaseApplication”是一个活动还是一个助手类?
  • 这不是活动
  • 如何从帮助类中做到这一点?
【解决方案2】:

我发现了我的错:

首先,我需要 MainActivity 的 ELSE 语句中的代码如下:

((FirebaseApplication)getApplication()).createNewUser(MainActivity.this, email, password);

其次,我需要更改 AndroidManifest.xml 的内容 LoginPageActivity 必须声明在:

<application>
...
...-->Another activity...
...
   <activity android:name=".LoginPageActivity">
       <intent-filter>
           <action android:name="android.intent.action.MAIN" />

           <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
   </activity>
</application>

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多