2016-03-24 20 views
0

ich in der Lage gewesen, um erfolgreich zu laden und Daten von meiner Feuerbasis Repo löschen Sie die Führung mit hier: https://www.firebase.com/docs/android/guide/saving-data.htmlFirebase auf Android nicht Abrufen von Daten

Allerdings, wenn ich versuche, und rufen Sie die Daten, die die Firebase Führung mit hier: https://www.firebase.com/docs/android/guide/retrieving-data.html

Die App-Aktivität hängt einfach - es gibt keinen Rückruf zu onDataChange oder onCancel. Ich verwende den genauen Code in dem Beispiel, das bis zu diesem Zeitpunkt in der Führung (in meiner Tätigkeit onCreate() -Methode) gearbeitet hat:

Firebase ref = new Firebase("https://docs-examples.firebaseio.com/web/saving-data/fireblog/posts"); 

ref.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     System.out.println(snapshot.getValue()); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
     System.out.println("The read failed: " + firebaseError.getMessage()); 
     } 
    }); 

Es gibt Daten am Beispiel URL so funktionieren soll. Ich laufe auf einem Telefon mit Android 4.0.3.

Was mache ich falsch?

Danke, Riz

Edit: Ich habe versucht, auf meinem Samsung Note 4 Android 5.1.1 laufen und Firebase funktioniert gut. Funktioniert nicht auf meinem Huawei mit Android 4.0.3. Etwas mit der Android-Version zu tun?

Edit 2: So stellt sich heraus, die Antwort unten war doch richtig. Ich fand in einer meiner Hilfsklassen einen alten Code, der den Thread pausierte, während er auf etwas wartete. Ich schrieb es wirklich asynchron um und es behob das Problem. Vielen Dank - ich habe die Antwort akzeptiert.

+0

Es a ** sehr ** gute Chance, dass die 'CallBackSignaler' einfach ist der Haupt-Thread blockiert und Ihre Anwendung hängt. Siehe [meine Antwort auf diese Frage] (http://stackoverflow.com/a/33204705/209103). –

+0

Siehe meine Antwort unten. Ich habe die Frage bearbeitet, um sie zu entfernen, war eine Ablenkung. – chdryra

+0

Ich habe die Antwort akzeptiert, wie Sie schließlich waren - siehe meine Bearbeitung – chdryra

Antwort

1

Das Synchronisieren von Daten aus Firebase ist ein asynchroner Vorgang. Es ist keine gute Idee, auf diese Daten zu warten.

Ihre blockiert die onDataChange() von aufgerufen werden. Wenn Sie den Signaler entfernen, sehen Sie, dass die Daten geladen sind, onDataChange() wird aufgerufen und der Wert wird protokolliert.

Siehe meine Antwort auf diese Frage: Setting Singleton property value in Firebase Listener

+0

Danke. Es ist nicht der Signalgeber, da ich es nur einfüge, sobald ich merke, dass es hängt, um nach dem Rückruf zu suchen, ohne auf den Debugger zurückgreifen zu müssen. Alle meine Klassen, die sich mit Persistenz befassen, sind asynchron von Entwurf - der Callback-Signalgeber ist nur ein Debugging-Tool für solche Probleme. – chdryra

+0

Ist Ihr Gerät mit dem Internet verbunden? Suchen Sie nach Flugmodus oder [Monitor '.info/connected'] (https://www.firebase.com/docs/android/guide/offline-capabilities.html#section-connection-state) –

+0

Ich habe eine neue clean erstellt Projekt in Android Studio mit nur dem Firebase-Beispiel innerhalb der MainActivity. Es scheint jetzt auf beiden Telefonen zu funktionieren. Ich bin nicht sicher, was passiert, aber es gibt eine Reihe von asynchronen Sachen in meiner Haupt-App passiert, wenn ich es zuerst fange, wenn Daten geladen werden. Ich frage mich, ob es ein Threading-Problem im Zusammenhang mit der Antwort gibt, die Sie am Anfang gegeben haben ... – chdryra

Verwandte Themen