Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase Authentication java.lang.IllegalArgumentException: Given String is empty or null

I tried all the other solutions. Got a new google-services.json, checked dependencies to see that they're all updated. Tried all possible ways to declare and initialize variables even if they didn't make sense. Still don't know what's wrong. Please take a look and thank you in advance!

public class SignUp_Fragment extends Fragment implements OnClickListener, AdapterView.OnItemSelectedListener {
private View view;

private TextView login;
private Button signUpButton;
private CheckBox terms_conditions;

EditText editTextFullName, editTextSignUpEmail, editTextMobile,
        editTextSignUpPassword, editTextConfirmPassword;

String signUpEmail;
String signUpPassword;
String mobile;
String fullName;

Spinner locationSpinner;

String stringLocation;

private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private User user;


private static FragmentManager fragmentManager;

public SignUp_Fragment() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.signup_layout, container, false);
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    editTextFullName = (EditText) view.findViewById(R.id.fullName);
    editTextSignUpEmail = (EditText) view.findViewById(R.id.userEmailId);
    editTextMobile = (EditText) view.findViewById(R.id.mobileNumber);
    editTextSignUpPassword = (EditText) view.findViewById(R.id.password);

    signUpEmail = editTextSignUpEmail.getText().toString();
    signUpPassword = editTextSignUpPassword.getText().toString();
    mobile = editTextMobile.getText().toString();

    mAuth = FirebaseAuth.getInstance();

    initViews();
    setListeners();


    return view;
}

// Initialize all views
private void initViews() {

    signUpButton = (Button) view.findViewById(R.id.signUpBtn);
    login = (TextView) view.findViewById(R.id.already_user);
    terms_conditions = (CheckBox) view.findViewById(R.id.terms_conditions);
    locationSpinner = (Spinner) view.findViewById(R.id.location);
    editTextConfirmPassword = (EditText) view.findViewById(R.id.confirmPassword);


    fragmentManager = getActivity().getSupportFragmentManager();


}

private void setListeners() {
    signUpButton.setOnClickListener(this);
    login.setOnClickListener(this);
}

@Override
public void onClick(View v) {



    switch (v.getId()) {
        case R.id.signUpBtn:

            // Call checkValidation method
            if (!checkValidation()) {

                new CustomToast().Show_Toast(getActivity(), view,
                        "تحقق من عدم وجود أخطاء");

            } else {

                onSignUpClicked(view);

            }

            break;

        case R.id.already_user:


            FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

            BuySell_Fragment frag = new BuySell_Fragment();

            ft.replace(R.id.frameContainer, frag);
            ft.addToBackStack(null);
            ft.commit();

            break;
    }

}

private boolean checkValidation() {

    String signUpEmail = editTextSignUpEmail.getText().toString();
    String signUpPassword = editTextSignUpPassword.getText().toString();
    String mobile = editTextMobile.getText().toString();
    String confirmPassword = editTextConfirmPassword.getText().toString();
    String fullName = editTextFullName.getText().toString();


    Pattern p = Pattern.compile(Utils.regEx);
    Matcher m = p.matcher(signUpEmail);

    String phoneRegex = (Utils.phoneRegEx);

    if (fullName.equals("") || fullName.length() == 0
            || signUpEmail.equals("") || signUpEmail.length() == 0
            || mobile.equals("") || mobile.length() == 0
            || signUpPassword.equals("") || signUpPassword.length() == 0
            || confirmPassword.equals("")
            || confirmPassword.length() == 0) {

        new CustomToast().Show_Toast(getActivity(), view,
                "جميع الخانات مطلوبة");

        return false;
    }

    // Check if email id valid or not
    else if (!m.find()) {

        new CustomToast().Show_Toast(getActivity(), view,
                "الايميل غير صحيح");

        return false;
    } else if (!mobile.matches(phoneRegex)) {

        new CustomToast().Show_Toast(getActivity(), view,
                "رقم الهاتف غير صحيح");

        return false;
    }


    // Check if both password should be equal
    else if (!confirmPassword.equals(signUpPassword)) {
        new CustomToast().Show_Toast(getActivity(), view,
                "كلمة السر غير متطابقة");
    }

    // Make sure user should check Terms and Conditions checkbox
    else if (!terms_conditions.isChecked()) {

        new CustomToast().Show_Toast(getActivity(), view,
                "المرجو الموافقة على الشروط و الاحكام");

        return false;
    }


    return true;
}


@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    String location = parent.getItemAtPosition(position).toString();
    stringLocation = location;


}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}

protected void setUpUser() {
    user = new User();
    user.setName(fullName);
    user.setPhoneNumber(mobile);
    user.setEmail(signUpEmail);
    user.setPassword(signUpPassword);
}

public void onSignUpClicked(View view) {
    createNewAccount(signUpEmail, signUpPassword);

}



private void createNewAccount(String email, String password) {

    checkValidation();


    setUpUser();

    mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {

            if (!task.isSuccessful()) {
                new CustomToast().Show_Toast(getActivity(), view,
                        "محاولة تسجبل فاشلة");
            } else {
                onAuthenticationSucess(task.getResult().getUser());
                new CustomToast().Show_Toast(getActivity(), view,
                        "تم تسجيل حساب بنجاح!");
            }


        }
    });

}

private void onAuthenticationSucess(FirebaseUser mUser) {
    saveNewUser(mUser.getUid(), user.getName(), user.getPhoneNumber(), user.getEmail(), user.getPassword());
    signOut();

    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

    Login_Fragment frag = new Login_Fragment();

    ft.replace(R.id.frameContainer, frag);
    ft.addToBackStack(null);
    ft.commit();
}

private void saveNewUser(String userId, String name, String phone, String email, String password) {
    User user = new User(userId, name, phone, email, password);


}


private void signOut() {
    mAuth.signOut();
}




@Override
public void onDetach() {
    super.onDetach();

    try {
        Field fragmentManager = Fragment.class.getDeclaredField("mFragmentManager");
        fragmentManager.setAccessible(true);
        fragmentManager.set(this, null);

    } catch (NoSuchFieldException e) {
        throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }
}


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

}

}

app build gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "edu.seu.seniorproject.producingfamily"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:support-vector-drawable:25.3.1'
    compile 'com.google.android.gms:play-services:10.2.4'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.google.firebase:firebase-database:10.0.1'
    compile 'org.jetbrains:annotations-java5:15.0'
    compile 'com.google.firebase:firebase-storage:10.0.1'
    compile 'com.google.firebase:firebase-auth:10.0.1'
    compile 'com.google.firebase:firebase-core:10.0.1'
    testCompile 'junit:junit:4.12'

}



apply plugin: 'com.google.gms.google-services'

Logcat:

java.lang.IllegalArgumentException: Given String is empty or null

at com.google.android.gms.common.internal.zzac.zzdr(Unknown Source)

at com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(Unknown Source)

at edu.seu.seniorproject.producingfamily.fragments.SignUp_Fragment.createNewAccount(SignUp_Fragment.java:250)

at edu.seu.seniorproject.producingfamily.fragments.SignUp_Fragment.onSignUpClicked(SignUp_Fragment.java:237)

at edu.seu.seniorproject.producingfamily.fragments.SignUp_Fragment.onClick(SignUp_Fragment.java:128)

at android.view.View.performClick(View.java:5198)

at android.view.View$PerformClick.run(View.java:21147)

at android.os.Handler.handleCallback(Handler.java:739)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper.java:148)

at android.app.ActivityThread.main(ActivityThread.java:5417)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

E/AndroidRuntime: FATAL EXCEPTION: main
Process: edu.seu.seniorproject.producingfamily, PID: 31055
java.lang.IllegalArgumentException: Given String is empty or null

at com.google.android.gms.common.internal.zzac.zzdr(Unknown Source)

at com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(Unknown Source)

at edu.seu.seniorproject.producingfamily.fragments.SignUp_Fragment.createNewAccount(SignUp_Fragment.java:250)

at edu.seu.seniorproject.producingfamily.fragments.SignUp_Fragment.onSignUpClicked(SignUp_Fragment.java:237)

at edu.seu.seniorproject.producingfamily.fragments.SignUp_Fragment.onClick(SignUp_Fragment.java:128)

at android.view.View.performClick(View.java:5198)

at android.view.View$PerformClick.run(View.java:21147)

at android.os.Handler.handleCallback(Handler.java:739)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper.java:148)

at android.app.ActivityThread.main(ActivityThread.java:5417)

at java.lang.reflect.Method.invoke(Native Method)

at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
like image 652
Yousef Avatar asked Sep 17 '25 21:09

Yousef


1 Answers

You are not managing signUpEmail and signUpPassword correctly. They are declared at class level and initialized in onCreateView():

    signUpEmail = editTextSignUpEmail.getText().toString();
    signUpPassword = editTextSignUpPassword.getText().toString();

At that time, the user has not yet entered any characters into the EditTexts and the strings are empty.

Later, in checkValidation() you get the contents of the EditTexts again, but mistakenly store the result in local variables instead of the class-level variables:

private boolean checkValidation() {
    String signUpEmail = editTextSignUpEmail.getText().toString();
    String signUpPassword = editTextSignUpPassword.getText().toString();

When you try to create an account, you are using the class-level variables, which are still empty.

Change checkValidation() to use the class level variables instead of local variables:

private boolean checkValidation() {
    signUpEmail = editTextSignUpEmail.getText().toString();
    signUpPassword = editTextSignUpPassword.getText().toString();
like image 122
Bob Snyder Avatar answered Sep 20 '25 11:09

Bob Snyder