2017-03-23 8 views
0

レルムデータベースからWebサーバーにオブジェクトのリストを送信する際に問題があります。アプリケーションは、インターネット接続が検出されなかった場合、トランザクションをローカルに保存する必要があります(私はレルムデータベースを使用しました)。その後、アプリがインターネット接続を検出すると、私の領域データベースのデータをJSON形式でWebサーバーに送信する必要があります。 Tia。RealmオブジェクトをJSONオブジェクトに変換することはできますか?

+0

RealmオブジェクトはJavaオブジェクトです。sooはい、可能です.. – miljon

+0

私はGSONでRealmを試しましたが、RealmオブジェクトをPOJOにすることはできません。 –

+0

'gson.toJson(realm.copyFromRealm(myObj))'を使います。それは箱の中で動くはずです。 –

答えて

1

はい、あなたはクラスにTypeAdapterを登録し、除外戦略を定義する必要があります。RealmObjectです。例えば

次のようなUserクラスを持っている:

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

    // Getter and setter methods. 
} 

あなたはユーザーSerializerを作成する必要があります。

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()); 
    } 
} 

最後に、あなたのGsonにTypeAdapterとしてこれを登録しなければならず、 Realmの除外戦略を追加してください。

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(); 

これはあなたに役立つと思います。がんばろう。

+1

カスタムタイプのアダプターはもう必要ありません。代わりに、 'realm.copyFromRealm(obj)'を使用して、分離コピーをGSONに送信してください。 –

+0

@ChristianMelchior私は、JSONベースのデータをRealmを拡張するオブジェクトにパースしたいと思っています。あなたはそれを助けることができますか?私はデータを保存したくない、私はちょうど解析したい。 –

関連する問題