如何让Android简单的Firebase身份验证工作?获取空对象引用错误

时间:2017-12-07 18:56:23

标签: android android-studio firebase firebase-authentication

问题修正更新:通过将Firebase降级到9.6.0(我选择的随机版本)来修复。我假设原始问题与模拟器的好戏或其他事情有关。

旧问题:我需要帮助,尝试设置Firebase Auth以登录用户。我已经在我的Firebase控制台中启用了这项功能,之前我已经完成了这项工作,并且几周前将其作为课程作业。但是这次我在尝试登录时获得了Null Object Reference。

我开始认为这与我的gradle文件有关。 mAuth不为空,字符串电子邮件和密码不为空。我只是关注此Firebase指南:https://firebase.google.com/docs/auth/android/password-auth

Exact Logcat error here

Module app Gradle file here

Project Gradle file here

以下全班。错误开始的第43行(如截图所示)是  ' mAuth.signInWithEmailAndPassword(电子邮件,密码)'

package com.example.bri.inclass09;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
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;
import com.google.firebase.auth.FirebaseUser;

public class LoginActivity extends AppCompatActivity {

private FirebaseAuth mAuth;
private EditText emailET, passwordET;
private Button login, signup;
private static final String TAG = "test";

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

    mAuth = FirebaseAuth.getInstance();
    Log.d(TAG, "mAuth is: " + mAuth.toString());
    login = findViewById(R.id.loginButton);
    signup = findViewById(R.id.signupButton);
    emailET =  findViewById(R.id.loginEmailET);
    passwordET = findViewById(R.id.loginPassET);

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String email = emailET.getText().toString();
            String password = passwordET.getText().toString();
            Log.d(TAG, email + " " + password);

            mAuth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                // Sign in success, update UI with the signed-in user's information
                                Log.d(TAG, "createUserWithEmail:success");
                                FirebaseUser user = mAuth.getCurrentUser();
                            } else {
                                // If sign in fails, display a message to the user.
                                Log.w(TAG, "createUserWithEmail:failure", task.getException());
                                Toast.makeText(LoginActivity.this, "Authentication failed.",
                                        Toast.LENGTH_SHORT).show();
                            }

                            // ...
                        }
                    });
        }
    });
}

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    //FirebaseUser currentUser = mAuth.getCurrentUser();
}

}

2 个答案:

答案 0 :(得分:0)

在app模块build.gradle文件中:

apply plugin: 'com.google.gms.google-services'

是错位的。它应该是最后一行,外部 dependencies块。

此外,设备或模拟器必须安装一个与您构建的Firebase版本兼容的Google Play服务版本。如果您在设备上看到此问题,可以前往Play商店下载最新版本。如果您使用的是模拟器,则需要使用SDK Manager为您正在使用的模拟器下载最新的Google API系统映像。

答案 1 :(得分:0)

在Android工作室验证一切正确使用工具,firebase,身份验证然后按照提示验证当前密钥调试或释放(无论你使用哪个)匹配设置如果正确,提示后你应该变绿“OK”然后确保你的密钥与firebase中的密钥相匹配

Tools

enter image description here