I am facing this bug for days now using Firebase-UI-Auth. The problem comes up when you create a new account with email. The NullPointer just appears on the release build (I am using proguard).
Exception I am getting after filling up the form
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$4$1.onComplete(Unknown Source)
at com.google.android.gms.c.l$1.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)
Method which launches
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");
}
}
}
}
}
This is a bug that was fixed in v2.0
which isn't out yet. If you want to try out the fix, you can replace your current firebase-ui-auth
dependency with this one which contains the fix:
compile 'com.github.SUPERCILEX.FirebaseUI-Android:firebase-ui-auth:0f7fc902c62fdc09e1c5812dd4dec2e6f5b4083d'
Be warned though, that's a snapshot version which hasn't gone through QA yet.
In case you're curious, here's the commit that fixed it: https://github.com/firebase/FirebaseUI-Android/commit/2a615f67508864aea488d1801dc446c419db64e7.