Android:为啥我不能使用“Intent”移动到另一个Activity?

Posted

技术标签:

【中文标题】Android:为啥我不能使用“Intent”移动到另一个Activity?【英文标题】: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");
    

【问题讨论】:

查看the stack trace以确定崩溃的原因。 Unfortunately MyApp has stopped. How can I solve this?的可能重复 【参考方案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>

【讨论】:

以上是关于Android:为啥我不能使用“Intent”移动到另一个Activity?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上注册 ACTION_VIEW Intent?为啥我的 QApplication 没有收到 QEvent::FileOpen 事件?

为啥 context.startActivity(intent) 没有启动活动以及如何在 android 中处理异常?

Android 编程中,为啥设置了 Intent.FLAG

为啥行为不同?- android:launchMode="singleTask" , android:taskAffinity="" 和 Intent.FLAG

Android Intent传递对象为啥要序列化,序列化有那几种方式

Intent为啥要实现Cloneable?