2017-05-06 4 views
1

私は他のすべてのソリューションを試しました。新しいgoogle-services.jsonを入手し、依存関係をチェックして、すべてが更新されていることを確認してください。たとえ意味がなくても、変数を宣言して初期化するすべての方法を試してみました。まだ何が間違っているのか分からない。見ていただきありがとうございます!Firebase認証java.lang.IllegalArgumentException:指定された文字列が空またはnull

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

} 

} 

アプリのビルドの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) 

答えて

1

あなたは正しくsignUpEmailsignUpPasswordを管理していません。彼らはクラスレベルで宣言され、onCreateView()で初期化されています

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

そのとき、ユーザはまだEditTexts内で任意の文字を入力していないと、文字列は空です。

その後、checkValidation()にもう一度EditTextsの内容を取得しますが、誤ってローカル変数の代わりに、クラスレベルの変数に結果を格納:

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

アカウントを作成しようとすると、あなたがしていますまだ空のクラスレベルの変数を使用します。代わりに、ローカル変数のクラスレベルの変数を使用する

変更checkValidation()

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

私は愚かな感じ。私はちょうどもう一組の目が必要だと思います。 – Yousef

関連する問題