2017-03-23 5 views
0

Ich habe ein Problem mit dem Senden einer Liste von Objekten aus meiner Realm-Datenbank an einen Webserver. Die App sollte die Transaktion lokal speichern (Ich habe Realm-Datenbank verwendet), wenn keine Internetverbindung gefunden wurde. Wenn die App dann die Internetverbindung erkennt, sollten die Daten aus meiner Realm-Datenbank an einen Webserver im JSON-Format gesendet werden. Tia.Ist es möglich, Realm-Objekt in JSON-Objekt zu konvertieren?

+0

Realm-Objekt ist Java-Objekt, so ja, es ist möglich .. – miljon

+0

Ich versuchte Realm mit GSON, aber ich kann nicht das Realm-Objekt zu einem POJO. –

+0

Verwenden Sie 'gson.toJson (realm.copyFromRealm (myObj))'. Das sollte out of the box funktionieren. –

Antwort

1

Ja, Sie können, aber Sie müssen TypeAdapter für Ihre Klasse registrieren und definieren eine Ausschluss-Strategie für Ihre Klassen erweitert RealmObject.

Zum Beispiel haben Sie eine User Klasse wie folgt aus:

public class User extends RealmObject { 
    @PrimaryKey 
    private String id; 
    private String name; 
    private String email; 

    // Getter and setter methods. 
} 

Sie haben einen Benutzer Serializer zu erstellen:

public class UserSerializer implements JsonSerializer<User> { 

    @Override 
    public JsonElement serialize(User user, Type typeOfSrc, JsonSerializationContext context) { 
     final JsonObject jsonObject = new JsonObject(); 
     jsonObject.addProperty("id", user.getId()); 
     jsonObject.addProperty("email", user.getEmail()); 
     jsonObject.addProperty("name", user.getName()); 
    } 
} 

Schließlich müssen Sie sich registrieren dies als TypeAdapter zu Ihrem Gson und Fügen Sie eine Ausschlussstrategie für Realm hinzu.

new GsonBuilder() 
     .setExclusionStrategies(new ExclusionStrategy() { 
      @Override 
      public boolean shouldSkipField(FieldAttributes f) { 
       return f.getDeclaringClass().equals(RealmObject.class); 
      } 

      @Override 
      public boolean shouldSkipClass(Class<?> clazz) { 
       return false; 
      } 
     }) 
     .registerTypeAdapter(User.class, new UserSerializer()) 
     .create(); 

Ich denke, das wird Ihnen helfen. Viel Glück.

+1

Sie benötigen den benutzerdefinierten Adapter nicht mehr. Senden Sie einfach eine abgetrennte Kopie an GSON und verwenden Sie stattdessen 'realm.copyFromRealm (obj)'. –

+0

@ChristianMelchior Ich möchte JSON-basierte Daten zu meinem Objekt analysieren, das Realm erweitert. Kannst du darauf helfen? Ich möchte die Daten nicht speichern, sondern nur parsen. –

Verwandte Themen