2

AUTHEN werde ich Daten zur Datenbank hinzufügen, wenn ich mich registrieren, aber ich habe
Firebase .getUID Nullpointer wenn

Java.lang.NullPointerException: Der Versuch, virtuelle Methode aufzurufen ‚java.lang.String com.google.firebase. auth.FirebaseUser.getUid()‘auf einem null-Objekt Referenz

ich versuche, etwas, aber nicht funktionieren

hier ist mein Code

auth = FirebaseAuth.getInstance(); 

    database = FirebaseDatabase.getInstance(); 

    mRef = database.getReference(); 
    FirebaseUser user = auth.getCurrentUser(); 
    userID = user.getUid(); 
btnSignUp.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String fname = etFname.getText().toString().trim(); 
      final String lname = etLname.getText().toString().trim(); 
      final String id_card = etIdCard.getText().toString().trim(); 
      final String email = etEmail.getText().toString().trim(); 
      final String mobile = etMobile.getText().toString().trim(); 
      String password = etPassword.getText().toString().trim(); 

      if (TextUtils.isEmpty(email)){ 
       Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show(); 
       return; 
      } 

      if (TextUtils.isEmpty(password)){ 
       Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show(); 
       return; 
      } 

      if (TextUtils.isEmpty(fname)){ 
       Toast.makeText(getApplicationContext(), "Enter FirstName!", Toast.LENGTH_SHORT).show(); 
       return; 
      } 

      if (password.length() < 8) { 
       Toast.makeText(getApplicationContext(), "Password too short, enter minimum 8 characters!", Toast.LENGTH_SHORT).show(); 
       return; 
      } 

      progressBar.setVisibility(View.VISIBLE); 

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


          if (!task.isSuccessful()) { 

           UserInfo userInfo = new UserInfo(fname,lname,id_card,mobile,email); 
           mRef.child("users").child(userID).setValue(userInfo); 
           etFname.setText(""); 
           etLname.setText(""); 
           etIdCard.setText(""); 
           etMobile.setText(""); 
           etEmail.setText(""); 
           Toast.makeText(RegisterActivity.this, "Authentication failed." + task.getException(), 
             Toast.LENGTH_SHORT).show(); 

          } else { 
           Toast.makeText(RegisterActivity.this, "Register Successfully" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); 
           progressBar.setVisibility(View.GONE); 

           finish(); 
          } 

         } 
        }); 
     } 
    }); 


} 

Und jetzt erhalten Sie einen neuen Fehler wie diesen java.lang.NoSuchMethodError: Keine virtuelle Methode zzTt() Z in der Klasse Lcom/google/Firebase/FirebaseApp; oder ihre Superklassen (Erklärung ‚com.google.firebase.FirebaseApp‘ erscheint in /data/app/com.example.androiddev.army31-1/split_lib_dependencies_apk.apk:classes36.dex)

Jetzt kann ich es beheben kompilieren, weil auf gradle nicht gleiche Version

und bekam die gleiche Sache

enter image description here

Antwort

2

Was ist die Art von auth Sie in dem Code erwähnt haben, ersetzen Sie es mit einzelnen Zeile und prüfen, ob es

funktioniert
 String mUid = FirebaseAuth.getInstance().getCurrentUser().getUid(); 

Sie können auch die Dokumentation prüfen für volle Arbeitscodebeispiel: https://firebase.google.com/docs/auth/android/manage-users

+0

Dank für die Antwort leider na, wie Ihr Code zu benutzen? Ich bin nicht sicher –

+0

Was ist der Unterschied zwischen einem einzelnen Liner und was er getan hat? Es ist nicht, ist diese grundlegende Java –

+0

finden Sie in der Dokumentation für eine vollständige Arbeits Code in Java [email protected] – Pheonix

0
FirebaseUser user = auth.getCurrentUser(); 
userID = user.getUid(); 

über zwei Zeilen ausführen zu können, müssen Sie (ich betonen Sie müssen) haben Benutzername/Passwort in authentifizierte based die Firebase. Es wirft NullPointerException, weil die meisten Neuling-Programmierer vergessen, benutzerbasierte Authentifizierung in der Firebase-Konsole einzurichten.

Sie können den Benutzer in der Firebase-Authentifizierung hinzufügen.

Wenn Sie Firebase Realtime Datenbank verwenden, dann schlage ich vor, dass Sie die folgenden Regeln in der Registerkarte REGELN hinzufügen.

// These rules grant access to a node matching the authenticated 
// user's ID from the Firebase auth token 
{ 
    "rules": { 
    "users": { 
     "$user_id": { 
     ".read": "$user_id === auth.uid", 
     ".write": "$user_id === auth.uid" 
     } 
    } 
    } 

}

+0

zitieren Antwort aktualisieren, aber ich ser { „Regeln“: { ".read": true, ".write": true } } –

+0

Siehe meine aktualisierte Antwort, ich spreche über Authentifizierung, Sie können REGELN vergessen. –

+0

Ok, ich habe es geändert, aber habe ein neues Problem split_lib_dependencies_apk.apk: classes36.dex) –

1

prüfen dies:

if(auth.getCurrentUser() != null){ 
    uid = auth.getCurrentUser().getUID(); 
} 
+0

danke für antworten aber es funktioniert nicht im update mein code plz see –

Verwandte Themen