2016-06-23 1 views
2

Ich habe eine Karte:Wie für die Offline-Nutzung eine HashMap in Firebase speichern

Map<String, String> noidung = new HashMap<>(); 

Die Map Daten von Firebase erhält, und ich zeige sie in einem Gridview. Alles hat gut funktioniert. Aber wenn das Telefon offline geht, möchte ich, dass die Daten, die ich geladen habe, in der Gridview bleiben. Meine Idee ist es, die Map noidung in einer Datei (ich denke SharedPreference) offline zu verwenden. Ich habe sehr viele Lösungen versucht, aber gescheitert.

+1

Behalten Sie Ihre Änderungen bei (z. B. mit sqlite) und stellen Sie sie 'onResume' Ihrer' Activity' wieder her. – Mena

Antwort

9

auf dieses Werfen Sie einen Blick:

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

Aus der Dokumentation:

Firebase apps automatically handle temporary network interruptions for you. Cached data will still be available while offline and your writes will be resent when network connectivity is recovered. Enabling disk persistence allows our app to also keep all of its state even after an app restart. We can enable disk persistence with just one line of code.

https://firebase.google.com/docs/database/android/offline-capabilities

Darüber hinaus können Sie bestimmte Orte synchron halten:

DatabaseReference scoresRef = FirebaseDatabase.getInstance().getReference("scores"); 
scoresRef.keepSynced(true); 

Die Einstellung der aktivierten Persistenz muss der allererste Aufruf der Firebase-API sein. Bevor Sie irgendwelche Fragen/etc. Eine gute Lage ist in Ihrer Application Unterklasse:

public class MainApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 

     FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
    } 

Vergessen Sie nicht, Ihr Manifest entsprechend zu aktualisieren:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="my.package" > 

    ... 
    <application android:name=".MainApplication"> 
     ... 
    </application> 
</manifest> 

Es ist wirklich so einfach. Und das macht Firebase so großartig :-)

+0

Vielen Dank für Ihre Antwort. Können Sie mir sagen, wo FirebaseDatabase.getInstance() hinzugefügt werden soll. SetPersistenceEnabled (true); ? Ich verwende Firebase in einem Fragment und es ist ein Fehler aufgetreten: –

+0

com.google.firebase.database.DatabaseException: Aufrufe von setPersistenceEnabled() müssen vor jeder anderen Verwendung der FirebaseDatabase-Instanz ausgeführt werden. bei com.google.firebase.database.FirebaseDatabase.zzhM (Unbekannte Quelle) bei com.google.firebase.database.FirebaseDatabase.setPersistenceEnabled (Unbekannte Quelle) –

+0

Es muss der allererste Aufruf der Firebase-API sein. Bevor Sie irgendwelche Fragen/etc. Ein üblicher Ort für diesen Code ist Ihre Unterklasse 'Application'. Siehe meine aktualisierte Antwort. – Niels