首页 > 解决方案 > 使用firebase的Android Studio登录不起作用

问题描述

我的应用在文本字段中显示错误,但 Android Studio 向我显示一切都是正确的。代码:

package com.vrobinde.reminder;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class LoginPage extends AppCompatActivity {

    EditText loginEmail, loginPassword;
    TextView cAcc;
    Button loginButton;
    FirebaseAuth fireAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loginpage);

        loginEmail      = findViewById(R.id.emailAdressLogin);
        loginPassword   = findViewById(R.id.passwordLogin);
        loginButton     = findViewById(R.id.loginButton);
        cAcc            = findViewById(R.id.noAccRegLink);
        fireAuth        = FirebaseAuth.getInstance();

        Toolbar toolbar = findViewById(R.id.toolbarlogin);
        setSupportActionBar(toolbar);

        if(fireAuth.getCurrentUser() != null) {
            startActivity(new Intent(getApplicationContext(), MainActivity.class));
            finish();
        }

        loginButton.setOnClickListener(new View.OnClickListener() {

            String email = loginEmail.getText().toString().trim();
            String password = loginPassword.getText().toString().trim();

            @Override
            public void onClick(View view) {
                if(TextUtils.isEmpty(email)) {
                    loginEmail.setError("Email Address is required!");
                    return;
                }
                if(TextUtils.isEmpty(password)) {
                    loginPassword.setError("Password is required!");
                    return;
                }
                fireAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        if(task.isSuccessful()) {
                            Toast.makeText(LoginPage.this, "Login successfully", Toast.LENGTH_SHORT).show();
                            startActivity(new Intent(getApplicationContext(), MainActivity.class));
                        } else {
                            Toast.makeText(LoginPage.this, "An error occurred!" + task.getException(), Toast.LENGTH_SHORT).show();
                        }

                    }
                });

            }
        });

        cAcc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(getApplicationContext(), RegisterPage.class));
            }
        });

    }
}

我的错误还是Android Studio?我在注册页面中使用了几乎相同的代码,并且那里一切正常。

唯一的区别是,我的注册类中的字符串名称是白色的,而登录类中的字符串名称是紫色的。

我在调试控制台中没有堆栈跟踪。

标签: androidfirebasefirebase-authentication

解决方案


将这些行放在 onClick() 方法中,而不是直接放在 setOnClickListener 下。

String email = loginEmail.getText().toString().trim();
String password = loginPassword.getText().toString().trim();

最好在类下直接声明字符串电子邮件字符串密码(作为实例变量)。


推荐阅读