Retrofit、Realm、Gsonで動作するカスタムシリアライザに問題があります。ここで私は私の三つのクラスの型のアダプタを登録しています:Android Retrofit + Realm + Gson:シリアライザが呼び出されない
GsonBuilder builder = new GsonBuilder();
// Register type adapters to modify outgoing json according to server requirements.
try {
builder
.registerTypeAdapter(Class.forName("io.realm.UserProxy"), new UserSerializer())
.registerTypeAdapter(Class.forName("io.realm.FavoriteSongProxy"), new FavoriteSongSerializer())
.registerTypeAdapter(Class.forName("io.realm.ArtistProxy"), new ArtistSerializer())
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
Gson gson = builder.create();
return new Retrofit.Builder()
.baseUrl("http://10.0.3.2:8080/myUrl/rest/v1/")
.addConverterFactory(GsonConverterFactory.create(gson))
.client(httpClient.build())
.build();
ユーザーがFavoriteSongがあり、FavoriteSongは、アーティストを持っています。私のシリアライザは非常によく似ています。ここにFavoriteSongSerializerの例があります。ここで
public class FavoriteSongSerializer implements JsonSerializer<FavoriteSong> {
@Override
public JsonElement serialize(FavoriteSong src, Type typeOfSrc, JsonSerializationContext context) {
Log.v("qwer", "serializingFavoriteSong");
final JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", src.getId());
jsonObject.add("song", context.serialize(src.getSong()));
return jsonObject;
}
}
は、ユーザーシリアライザです:
public class UserSerializer implements JsonSerializer<User> {
@Override
public JsonElement serialize(User src, Type typeOfSrc, JsonSerializationContext context) {
Log.v("qwer", "serializingUser");
final JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", src.getId());
jsonObject.add("favoriteSong", context.serialize(src.getFavoriteSong()));
return jsonObject;
}
}
奇妙な部分の両方が、私は私の要求を送信するときFavoriteSongとソングシリアライザは(私は、ログ文を見ることができます)と呼ばれていますが、UserSerializerそうではありません。なぜこれが起こっているのか、あるいは私がどのようにトラブルシューティングを行うかも知っているのか、誰でも知っていますか?
/**だから私はちょうどIDが含まれているTestModelを作成したテストなどの編集**/
、それのためのシリアライザを作成したが、タイプのアダプタを登録して、私のUserモデルにこれを追加しました。また、TestModelSerializerを呼び出すこともできません(デフォルトメソッドに従ってシリアル化されていても)。
私はRealmに慣れていませんが、問題はそれが原因かもしれません。 UserSerializerは、io.realm.UserProxyクラスのアダプタを登録している間にユーザーを再起動します –
[この回答](http://stackoverflow.com/a/42044320/3503855)にチェックを入れましたか?これは、Gson + Realmの非互換性を回避する方法を**簡単に**提供します。 – AnixPasBesoin
残念ながら、私の特定の問題を解決することはできませんでした(私は以下の解決策を考え出しました)が、Retrofit-Gsonの問題を誰にでも知らせるためには間違いなく、同じシナリオを数週間前に処理しました。何が起こっているのか把握する。 – jwBurnside