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:launchMode="singleTask" , android:taskAffinity="" 和 Intent.FLAG