2017-07-14 2 views
4

Ich lief über ein Problem, wo ich nicht wirklich sicher bin, wie es zu lösen. Das Projekt, an dem ich gerade arbeite, hat ein Modell, das teilweise aus Backend gespeicherten Daten und Daten aus der lokalen Datenbank besteht. Also, was ich zum Archiv versuchen ist so etwas wie die:Android Zimmer teilweise Update wenn Ausfahrt

Artikel: [Bunch of Information] & [boolean Gezeichnetes]

Das gezeichnete Feld Gerät gebunden und soll nicht alle Daten auf dem Back-End reflektieren. Meine Frage ist, ob es möglich ist, in jedem Zimmer eine Art von createIfNotExit() Methode zu implementieren, die die folgenden Fälle behandelt:

  • Artikel nicht lokal vorhanden: Speichern einer Kopie und Satz abonniert falsch
  • Artikel vorhanden: Aktualisierung alle Informationen und halten die Abonnieren-Flagge unberührt

Meine Idee ist es, das Modell in ein separates Abonnement-Modell hält einen Verweis auf die Artikel zu teilen. Auf diese Weise konnte ich es einfach über @Update(OnConfict=Update) usw. implementieren ...

Gibt es eine Möglichkeit, eine einfache @Query Methode in der DAO zu implementieren, die ausführt, was ich will?

Es tut uns leid, wenn dies eine wirklich grundlegende Frage ist, aber ich konnte kein Material über Best Practices finden, die diesen Fall behandeln.

Vielen Dank im Voraus!

+0

Fügen Sie Ihre Entitätsbeschreibung hinzu. Ich brauche PrimaryKeys zum Schreiben der Antwort – DeKaNszn

+0

Nun, ich habe gerade angefangen, die App zu planen und dieser Punkt ist das Problem, das ich noch nicht herausfinden kann> HugoCodes

Antwort

2

Beispiel: Ihr Unternehmen ist:

@Entity(tableName = "articles") 
public final class Article { 
    @PrimaryKey 
    public long serverId; 
    public String title; 
    public String url; 

    public boolean isSubscribed; 
} 

Sie können diese Methode in DAO schreiben:

@Query("INSERT OR REPLACE INTO articles (serverId, title, url, isSubscribed) VALUES (:id, :title, :url, 
    COALESCE((SELECT isSubscribed FROM articles WHERE id = :id), 0));") 
void insertOrUpdateArticle(long id, String title, String url); 

Eine weitere Option - diese Logik in Ihrem Repository schreiben und zwei einfache Operationen verwenden: wählen und update

+0

Okay, danke das sollte genau das sein, was ich gesucht habe :-) – HugoCodes

+2

Okay, eigentlich bin ich nicht erlaubt, den INSERT-Befehl mit Raum zu verwenden. – HugoCodes

+0

@HugoCodes Wie haben Sie insertOrUpdate Problem mit Raum implementiert? Bitte teilen Sie alle Ideen und Codes Beispiel. – nAkhmedov