FirebaseAuth为null

时间:2017-04-03 15:05:26

标签: android firebase firebase-authentication

我的代码中的FirebaseAuth.getInstance获得了null返回值,导致我的应用无法运行。这是我的主要内容:

public class MainActivity extends AppCompatActivity {
    //Firebase Auth
    public static final int RC_SIGN_IN = 1;
    //Cloud vision
    private static final String CLOUD_VISION_API_KEY = "AIzaSyBHgLORJOy0BAp6PYL5DqX0hwQYAv8-3xE";
    public static final String FILE_NAME = "temp.jpg";
    private static final String ANDROID_CERT_HEADER = "X-Android-Cert";
    private static final String ANDROID_PACKAGE_HEADER = "X-Android-Package";
    //Cloud vision
    private static final String TAG = MainActivity.class.getSimpleName();
    private static final int GALLERY_PERMISSIONS_REQUEST = 0;
    private static final int GALLERY_IMAGE_REQUEST = 1;
    public static final int CAMERA_PERMISSIONS_REQUEST = 2;
    public static final int CAMERA_IMAGE_REQUEST = 3;
    //Cloud vision
    private TextView mImageDetails;
    private ImageView mMainImage;
    //Firebase instance variables
    //DATABASE
    /*
    private FirebaseDatabase mFirebaseDatabase;
    private DatabaseReference mPhotosDatabaseReference;
    private DatabaseReference mVisionOutputDatabaseReference;
    private DatabaseReference mUserFeedbackDatabaseReference;
    */
    //AUTH
    private FirebaseAuth mFirebaseAuth;
    private FirebaseAuth.AuthStateListener mAuthStateListener;

    //Cloud vision
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //Cloud vision
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //Initialize Firebase
        //Database
        //mFirebaseDatabase = FirebaseDatabase.getInstance();
        //Auth
        mFirebaseAuth = FirebaseAuth.getInstance();

最后一行是我获得空回报的地方。

干杯。

6 个答案:

答案 0 :(得分:2)

如果您没有互联网连接,则可以获得空值。如果连接速度很慢,可能无法立即使用。

答案 1 :(得分:0)

你添加了

 mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    /////////////////////////////////////////////////////////////////////////

                    ////////////////
                } else {


                }
            }
        };

并在 onStart

public void onStart() {
        super.onStart(); 

         mAuth.addAuthStateListener(mAuthListener);

    }

答案 2 :(得分:0)

要获取mFirebaseAuth对象,您需要在onStart方法中添加一个像这样的监听器:mFirebaseAuth.addAuthStateListener(authListener);。您需要声明private FirebaseAuth.AuthStateListener authListener;而不是onCreate方法添加此代码:

    authListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            firebaseUser = firebaseAuth.getCurrentUser();
            if (firebaseUser != null) {
                // do stuff
            }
        }
    };

希望它有所帮助!

答案 3 :(得分:0)

发现我的问题。我的数据库API包不是Firebase UI版本的正确版本。我从来没有检查过它,因为我专注于Auth部分。

答案 4 :(得分:0)

就我而言,我注意到此标签由于某些未知原因而重复!当我删除多余的东西时,一切都开始正常工作。

<meta-data android:name="com.google.firebase.components:com.google.firebase.iid.Registrar"
            android:value="com.google.firebase.components.ComponentRegistrar"/>

只是想分享这种经验,所以也许对其他人有帮助。我只是花了4个小时来解决这个问题:-/

答案 5 :(得分:0)

将此添加到清单中

<service android:name="com.google.firebase.components.ComponentDiscoveryService">
        <meta-data
            android:name="com.google.firebase.components:com.google.firebase.auth.FirebaseAuthRegistrar"
            android:value="com.google.firebase.components.ComponentRegistrar" /> </service>

如果清单中存在相同的服务,则仅使用元数据标记。