4

Ich schreibe eine Android-Anwendung mit Firebase Api 9. +.Firebase onDataChange nicht aufgerufen, Anwendung nach einiger Zeit zu öffnen

Ich benutze Firebase-Authentifizierung und Datenbank.

Wenn ich auf meine App zugreife und mich anmelde, ist alles in Ordnung und die Daten werden vom valueEventListeners korrekt abgerufen.

Mein Problem beginnt, wenn ich meine app nach einiger Zeit zugreifen und es ist bereits angemeldet.

Authentifizierung zu bestätigen scheint, aber keiner meiner Zuhörer ausgelöst und nichts scheint abgerufen zu werden.

Damit meine Anwendung wieder funktioniert, muss ich mich abmelden und erneut anmelden.

Ich weiß nicht, ob es ein "Sitzung abgelaufen" Problem ist oder etwas, das ich vergessen habe, in meinen Code zu schreiben.

Dies ist einer meiner valueEventListeners:

DatabaseReference myFirebase = FirebaseDatabase.getInstance().getReference(); 
hairDresserFirebase = myFirebase.getReference("hairDressers"); 
hairDresserFirebase.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot snapshot : dataSnapshot.getChildren()){ 
      HairDresser hd = snapshot.getValue(HairDresser.class); 
      if (hairDresserList.contains(hd)) hairDresserList.remove(hd); 
      hairDresserList.add(hd); 
     } 
     mRecyclerView.getAdapter().notifyDataSetChanged(); 
    } 

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

Die anderen nur für die Referenz ändern.

Sie sind alle in OnCreateView() -Methode von verschiedenen Fragmenten.

Dies ist der Code int der onCreate() -Methode meiner splash Aktivität ausgeführt, um zu überprüfen, wenn der Benutzer bereits angemeldet ist:

mAuth = FirebaseAuth.getInstance(); 
mAuthListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user == null) return; 
     authenticated = true; 
    } 
}; 

Während mein log in Tätigkeit nur dann eingeleitet, wenn der Benutzer nicht angemeldet ist und Führt das vollständige richtige Verfahren aus, um sich mit E-Mail und Passwort oder mit Facebook anzumelden, und es funktioniert einwandfrei.

Ich habe nichts gefunden, um dieses Problem zu lösen. Ich möchte meine Benutzer nicht zwingen, sich jedes Mal, wenn sie meine Anwendung öffnen, erneut zu authentifizieren.

Bitte helfen Sie mir :)

+0

** 1. ** Können Sie bitte die Verlangsamung der ** myFirebase ** Referenz hinzufügen? ** 2. ** Haben Sie die Anwendung debuggt? Sie sind sicher, dass ** onDataChange ** und ** onCancelled ** nicht aufgerufen wurden? Ich empfehle, Log-Ausdruck in jeder Methode und in jeder * if * -Anweisung hinzuzufügen, um genau zu sehen, was aufgerufen wurde und was nicht. –

+0

1. Ich habe die Deklaration hinzugefügt. 2. Ja, ich habe Logs überall mehr als einmal hinzugefügt und nichts wurde gedruckt. –

+0

Ich habe das gleiche Problem mit der E-Mail/Passwort-Authentifizierung mit Firebase: 9.0.2. – Blodhgard

Antwort

2

Sie wahrscheinlich mit Firebase zu verlieren Verbindung. Sie können dies bestätigen, indem Sie den Code in Ihrer Tätigkeit ausgeführt wird, die Verbindung zu überwachen:

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) { 
       System.out.println("connected"); 
      } else { 
       System.out.println("not connected"); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError error) { 
      System.err.println("Listener was cancelled"); 
     } 
    }); 

FYI - Firebase ist derzeit mit Problemen mit Android-Authentifizierung und arbeiten an einer Lösung. Siehe Firebase Status Dashboard: https://status.firebase.google.com/incident/Authentication/16001

Also rate ich Ihnen, nur zu warten, bis das Problem gelöst wurde. Ich habe auch eine similar problem erlebt und kann in der Zwischenzeit wirklich nicht viel tun, aber warte. Hoffe, dass hilft.

+0

Danke, ich habe Ihren Code ausprobiert und er druckt "nicht verbunden". Ist es das gleiche Ergebnis, das Sie erhalten? Wenn ja, könnte es wirklich ein Firebase-Bug sein. Wenn nicht, bleibt mein Problem bestehen. –

+0

Yeah dasselbe Ergebnis für mich. Ich habe einen Fehlerbericht eingereicht. Ich warte also darauf, von ihnen zu hören. –

+0

Firebase scheint jetzt zu funktionieren und Ihr Code meldet mich als "nicht verbunden" an, was passiert? –