2016-04-19 13 views
0

Ich muss eine Anwendung schreiben können offline arbeiten, aber auch in Anwesenheit eines Netzwerks minimieren Sie die Anzahl der wiederholten Netzwerkanforderungen. Wie denke ich. Ich werde die Nachrüstung, Lader, SQLite verwenden. Cache Ungültigkeits auf Zeit (Datetime-Spalte in der Tabelle) werden Server API -> JSON -> Object -> SQLiteCache-Strategie in Android

1) Wenn in einem Netzwerk SQLite-Datenbank arbeitet, wird mit einer Markierung der Zeit gefüllt werden, wenn die Daten waren erhalten
2) Wenn erneut aufgefordert, wenn die Daten über die Zeit nicht veraltet sind (z. B. weniger als 8 Stunden) verfügbare Daten in der DB verwendet werden.
3) Wenn gültig bis die Daten werden durchgeführt wiederholte Anfragen und Aktualisieren von Daten in SQLite
4) Wenn das Netzwerk nicht und hat nicht aktuell ist, wird die Anwendung verwenden, die alten Daten

Wenn ein technisch Korrekte Möglichkeit?

Wenn möglich, geben Sie bitte die Details der Umsetzung, die Namen von Klassen, Bibliotheken, Link auf Github etc ... Danke

PS sorry für Englisch)

+0

Ich bin überrascht, so viele Leute benutzen SQLite, während sie es nicht tun https://en.wikipedia.org/wiki/Relational_database überhaupt, haben Sie eine andere Art von Speicher in Betracht gezogen? –

Antwort

0

Option 1: Sie Sie können einen Synchronisierungsadapter verwenden, um Ihre Daten auf dem neuesten Stand zu halten. http://developer.android.com/training/sync-adapters/creating-sync-adapter.html

Option 2: Sie können Ihre Cache-Invalidierungsregel definieren. Sie können in den Voreinstellungen speichern, wann die letzte Schreiboperation war, wenn sie 8 Stunden oder den von Ihnen festgelegten Betrag überschreitet, löschen Sie die gesamte Datenbank, Tabelle oder nur eine Zeile. Und speichern Sie einfach jede Anfrage Antwort an die DB beim Empfang.

PS können Sie auch okhttp mit Retrofit verwenden, um Ihre Antwort für Sie in einem LRU-Cache zwischenzuspeichern.

okHttpClient = new OkHttpClient.Builder() 
      .cache(new Cache(new File(Constants.CACHE_DIR, "http"), 10485760)) 
      .build(); 
    restApi = new Retrofit.Builder() 
      .baseUrl(RestApi.API_BASE_URL) 
      .client(okHttpClient).build(); 
+0

_Sie können einen Synchronisationsadapter verwenden, um Ihre Daten auf dem neuesten Stand zu halten_ Kann ich JobScheduler oder GcmNetworkManger anstelle von SyncAdapter verwenden? –

+0

Ja kannst du. Aber beachten Sie, dass, obwohl ein Sync-Adapter ist schwer zu installieren und eine Menge Standard, aber es macht die Arbeit erledigt. Die Verwendung von JobScheduler oder GcmNetworkManager ist zwar möglich, aber Sie müssen die gesamte Synchronisationslogik implementieren, die sich schwer und effizient implementieren lässt. –