【问题标题】:FirebaseAuth is nullFirebaseAuth 为空
【发布时间】:2017-04-03 15:05:26
【问题描述】:

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

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();

最后一行是我得到空返回的地方。

干杯。

【问题讨论】:

  • 你是说FirebaseAuth.getInstance()返回null吗?最近发布了一个类似的问题。 Firebase 开发人员查看了源代码和said that is not possible。调用 FirebaseAuth.getInstance() 后是否立即测试 null?
  • 您使用的是哪个版本的firebase-auth
  • Auth 10.2.0 和 Auth UI 1.2.0。我最初是在之前进行测试,然后在之后进行了测试

标签: android firebase firebase-authentication


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你添加了吗

     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);
    
        }
    

    【讨论】:

    • 我添加了 onStart 方法,并且我已经有了下面的监听器,但我仍然得到一个空语句。
    【解决方案3】:

    为了获得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
                }
            }
        };
    

    希望对你有帮助!

    【讨论】:

    • 我添加了 onStart 方法,下面已经有了监听器,但我仍然得到一个空语句
    • 调用FirebaseAuth.getInstance()mFirebaseAuth 的值是多少。是null吗?
    • 是的,它是空的。
    • 您是否在您的 Firebase 帐户中启用了 Authentication -> SIGN-IN METHOD -> provider?您需要启用您正在使用的Email/PasswordGoogle 等。
    • 是的,我愿意。我也有匿名启用,但在我的提供程序中没有。但是我尝试在 Firbase 中禁用它并没有任何区别。
    【解决方案4】:

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

    【讨论】:

    • 只是好奇——以防其他人报告这个问题。与firebaes-auth 10.2.0 和firebase-ui 1.2.0 冲突的firebase-database 版本是什么?
    • 10.2.1.似乎 Firebase UI 落后于实际的 Firebase。最新的同步可以在这里找到:link
    • 谢谢。当我尝试使用该库组合时,我遇到了崩溃:E/FirebaseApp: Firebase API initialization failure 而不是 null auth 实例。也许我们使用的设备版本有所不同。
    • 我实际上已经安装了 APK,但它一直给我一条“抱歉,您的应用已关闭”的消息。
    【解决方案5】:

    在我的例子中,我注意到这个标签由于一些未知的原因被重复了!当我移除多余的那个时,一切都开始正常工作了。

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

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

    【讨论】:

      【解决方案6】:

      将此添加到您的清单中:

      <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>
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-06
        • 2020-09-23
        • 2020-01-28
        • 2017-05-21
        相关资源
        最近更新 更多