【问题标题】:How to define an Intent inside a Lambda expression如何在 Lambda 表达式中定义 Intent
【发布时间】:2026-02-09 07:55:02
【问题描述】:

我正在 Android Studio 中制作应用程序,我想从 LoginActivity 转到 MainActivity,并在 OnCompleteListener() 中使用 Intent

我试过了:

firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener() {
    @Override
    public void onComplete(@NonNull Task task) {
        if(task.isSuccessful()) {
            Intent mainActivity = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(mainActivity);
            finish();
        }
    }
});

//and

firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener() {
    @Override
    public void onComplete(@NonNull Task task) {
        if(task.isSuccessful()) {
            Intent mainActivity = new Intent(LoginActivity.this, MainActivity.class);
            startActivity(mainActivity);
            finish();
        }
    }
});

使用这两个参数,应用程序编译正确,但在触发signInWithEmailAndPassword() 方法时停止。

还有其他参数可以使用吗?

【问题讨论】:

  • 在尾部的第三行我写的是“complied”而不是“compiled”,很抱歉造成混乱
  • 您可以随时返回并编辑您的 OP,而无需添加评论只是说对不起。我们每天都会犯错。这是生活的一部分。
  • 应用停止是什么意思?它崩溃了吗?你可以分享logcat吗? Lambda 只是让你的代码看起来更小更干净,但它不会修复崩溃。

标签: java android android-intent lambda java-8


【解决方案1】:

Intent 应该以与以前相同的方式创建。 LoginActivity.this 指的是外部 LoginActivity 类的这个实例,其中使用了内部匿名类。它可能并不是要替换 getApplicationContext()

就您标记 而言,您希望将匿名类实现缩短为 lambda 表达式,就这样吧:

firebaseAuth.signInWithEmailAndPassword(email, password)
    .addOnCompleteListener(this, task -> {
         if (task.isSuccessful()) {
             Intent mainActivity = new Intent(getApplicationContext(), MainActivity.class);
             startActivity(mainActivity);
             finish();
         }
    });

请记住,Intent 实例化与 lambda 表达式无关。关键部分是缩短:

new OnCompleteListener() {
    @Override
    public void onComplete(@NonNull Task task) { ... }
}

...到...

task -> { ... }

【讨论】: