NullPointerException - 使用电子邮件登录 - Firebase-UI-Auth 1.2.0

NullPointerException - Sign In With Email - Firebase-UI-Auth 1.2.0

我现在使用 Firebase-UI-Auth 面临这个错误好几天了。当您使用电子邮件创建新帐户时,问题就出现了。 NullPointer 刚刚出现在发布版本中(我正在使用混淆器)。

填写表格后出现异常

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
                                                   at com.firebase.ui.auth.util.signincontainer.SaveSmartLock.saveCredentialsOrFinish(Unknown Source)
                                                   at com.firebase.ui.auth.ui.BaseHelper.saveCredentialsOrFinish(Unknown Source)
                                                   at com.firebase.ui.auth.ui.email.RegisterEmailFragment.onComplete(Unknown Source)
                                                   at com.google.android.gms.c.l.run(Unknown Source)
                                                   at android.os.Handler.handleCallback(Handler.java:751)
                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                   at android.os.Looper.loop(Looper.java:154)
                                                   at android.app.ActivityThread.main(ActivityThread.java:6123)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

混淆器

依赖关系

启动的方法

private void launchLoginActivityResult() {
    startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setIsSmartLockEnabled(false)
                    .setTheme(R.style.LoginTheme)
                    .setIsSmartLockEnabled(!BuildConfig.DEBUG)
                    .setProviders(Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
                            new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(),
                            new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build()))
                    .build(),
            RC_SIGN_IN);

    overridePendingTransition(R.anim.slide_in_right, R.anim.slide_in_right);
}

onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {

        if (resultCode == ErrorCodes.UNKNOWN_ERROR){
            AuthUI.getInstance().signOut(this);
            finish();
        }

        if (resultCode == ErrorCodes.NO_NETWORK){
            mTextViewMessage.setVisibility(View.VISIBLE);
            mFrameLayoutContainer.setVisibility(View.GONE);
            mTextViewMessage.setText(getString(R.string.no_internet));

            final DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
            connectedRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                    boolean connected = snapshot.getValue(Boolean.class);
                    if (connected) {
                        connectedRef.removeEventListener(this);
                        relaunchActivity();
                    }
                }

                @Override
                public void onCancelled(DatabaseError error) {
                }
            });


        }else{
            mTextViewMessage.setVisibility(View.GONE);
            mFrameLayoutContainer.setVisibility(View.VISIBLE);
        }

        if (resultCode == RESULT_CANCELED) finish();
    } else if (requestCode == RC_BARCODE_CAPTURE) {
        if (requestCode == RC_BARCODE_CAPTURE) {
            if (resultCode == CommonStatusCodes.SUCCESS) {
                if (data != null) {
                    Barcode barcode = data.getParcelableExtra(BarcodeCaptureActivity.BarcodeObject);
                    Log.d(TAG, "Barcode read: " + barcode.displayValue);

                    Fragment searchFragment = SearchResultFragment.newInstance(mUser.getUid(), mFolderId, barcode.displayValue);

                    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                    transaction.replace(R.id.fragment_main_container, searchFragment).commit();

                } else {
                    Log.d(TAG, "No barcode captured, intent data is null");
                }
            }

        }
    }
}

这是一个已在 v2.0 中修复但尚未发布的错误。如果你想尝试这个修复,你可以用这个包含修复的依赖替换你当前的 firebase-ui-auth 依赖:

compile 'com.github.SUPERCILEX.FirebaseUI-Android:firebase-ui-auth:0f7fc902c62fdc09e1c5812dd4dec2e6f5b4083d'

请注意,这是一个尚未通过质量检查的快照版本。

如果你很好奇,这里是修复它的提交:https://github.com/firebase/FirebaseUI-Android/commit/2a615f67508864aea488d1801dc446c419db64e7