1

This is my database in firebaseWie erhalten Sie Referenzbenutzer-UIDs als Eltern von der Firebase-Datenbank? #AskFirebase

DatabaseReference myDatabase=FirebaseDatabase.getInstance().getReference(); 

private FirebaseAuth authData; 
private EditText number; 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_schedule); 

    number= (EditText)findViewById(R.id.number); 

    DatabaseReference lastdata=myDatabase.child("QExqazU73kTJllMFtsN0alwH6aq1").child("Schedule").child("Monday").child("Hour"); 

    lastdata.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) 
     { 
      String text= dataSnapshot.getValue(String.class); 
      number.setText(text); 
     } 

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

In diesem Teil:

DatabaseReference lastdata=myDatabase.child("QExqazU73kTJllMFtsN0alwH6aq1").child("Schedule").child("Monday").child("Hour"); 

Wenn ich wie Benutzer uid schreiben, dass die Ergebnisse wahr sind. Allerdings möchte ich Benutzer uid erhalten, die gehört zu Benutzer, die angemeldet sind.

Wenn ich

String user_id= authData.getCurrentUser().getUid(); 
DatabaseReference userid_database=myDatabase.child(user_id).child("Schedule").child("Monday").child("Hour"); 

wie das schreiben, Programm schließen und nicht erneut ausführen.

Antwort

0

Dieses in Ihrer Login-Aktivität

private DatabaseReference mDatabase; 

mDatabase = FirebaseDatabase.getInstance().getReference(); 
AuthData authData = mDatabase.getAuth(); 
    if(authData!=null){ 
    //Get uid of logged in user 
    uid = authData.getUid() ; 
    Toast.makeText(getContext(), "-"+authData.getAuth().get("email"), Toast.LENGTH_SHORT).show();  
} 
2

Ohne die Ausnahme zu sehen, mit denen Ihr Programm schließt es schwer ist, sicher zu sein. Aber ein wahrscheinliches Problem ist, dass der Benutzer noch nicht angemeldet ist, wenn Sie versuchen, ihre Daten zu lesen, was zu einem NullPointerException führen würde, wenn Sie versuchen, getUid() aufzurufen.

Die Lösung für dieses Problem wäre der Benutzer zu warten, bis authentifiziert wird:

myAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user != null) { 
      // User is signed in 
      System.out.println("onAuthStateChanged:signed_in:" + user.getUid()); 
      String user_id= user.getUid(); 
      DatabaseReference userid_database=myDatabase.child(user_id).child("Schedule").child("Monday").child("Hour"); 
      ... 
     } 
    } 
}); 
+0

Es lief nicht. Es heißt "TAG hat privaten Zugang in 'android.support.v4.app.FragmentActivity'". Ich habe versucht, android.support.v4.app.FragmentActivity zu importieren und compile 'com.android.support:support-v4:25.1.0' in build.gradle-Datei hinzuzufügen, aber es hat nicht funktioniert. –

+1

TAG ist nur ein gebräuchlicher Name für die Konstante, die Sie in 'Log'-Aufrufe übergeben. Ich habe es jetzt mit einem regulären 'System.out.println()' ersetzt, da es nichts mit Firebase zu tun hat. –

+0

Ich bin neu bei Android und auch nicht gut bei Java. Nun heißt es im debug: verursacht durch: java.lang.NullPointerException: Versuch, die virtuelle Methode 'void com.google.firebase.auth.FirebaseAuth.addAuthStateListener (com.google.firebase.auth.FirebaseAuth $ AuthStateListener)' bei einem NULL-Aufruf aufzurufen Objektreferenz –

Verwandte Themen