不幸的是MyBooks已停止

时间:2019-11-01 08:45:15

标签: android firebase firebase-authentication

注册后,我将进入下一个活动页面     正在显示欢迎信息的HomeActivity ...您已登录,当我登录时     单击“前进”按钮,发生错误,很遗憾     MyBooks已停止。为什么会这样呢?为什么会发生错误?     创建Intent是否有任何错误??

这是我的HomeActivity.java

 package com.example.easylearn;
 import androidx.appcompat.app.AppCompatActivity;

 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;

 import com.google.firebase.auth.FirebaseAuth;

 public class HomeActivity extends AppCompatActivity {

  Button btngo;
  FirebaseAuth mFirebaseAuth;
  private FirebaseAuth.AuthStateListener mAuthStateListener;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_home);
     btngo = findViewById(R.id.go);

     btngo.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             Intent intgo = new 
    Intent(HomeActivity.this,BranchActivity.class);
             startActivity(intgo);
         }
     });
    }
    }

这是我的BranchActivity.java

    package com.example.easylearn;

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

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.auth.FirebaseUser;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;

public class BranchActivity extends AppCompatActivity {

    Button CSE;
    Button ME;
    Button Civil;
    Button EE;
    FirebaseAuth mFirebaseAuth;
    private FirebaseAuth.AuthStateListener mAuthStateListener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_branch);

        mFirebaseAuth = FirebaseAuth.getInstance();
        CSE = findViewById(R.id.button);
        ME = findViewById(R.id.button4);
        Civil = findViewById(R.id.button3);
        EE = findViewById(R.id.button5);

        CSE.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intCSE = new Intent(BranchActivity.this,YearActivity.class);
                startActivity(intCSE);
            }
        });

        ME.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intME = new Intent(BranchActivity.this,YearActivity.class);
                startActivity(intME);
            }
        });

        EE.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intEE = new Intent(BranchActivity.this,YearActivity.class);
                startActivity(intEE);
            }
        });

        Civil.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intCivil = new 
         Intent(BranchActivity.this,YearActivity.class);
                startActivity(intCivil);
            }
        });
        }

       @Override
       protected void onStart() {
        super.onStart();
        mFirebaseAuth.addAuthStateListener(mAuthStateListener);
        }
      }

1 个答案:

答案 0 :(得分:2)

您正在呼叫:

mFirebaseAuth.addAuthStateListener(mAuthStateListener);

这意味着您要在用户的身份验证状态更改时要求Firebase调用mAuthStateListener对象上的方法。但是您永远不会在代码中给mAuthStateListener赋予任何值,所以它就是null。当身份验证状态更改时,Firebase尝试调用mAuthStateListener.onAuthStateChanged,这会导致您收到错误消息。

解决方案是正确实现auth状态更改侦听器,例如here。可能是这样的事情:

mFirebaseAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth auth) {
        if (auth.getCurrentUser() != null) {
            ...
        }
    }
});

在这种情况下,您甚至都不需要private FirebaseAuth.AuthStateListener mAuthStateListener;字段。