У меня проблема с моими сериализаторами, работающими с 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 не является. Кто-нибудь знает, почему это может произойти, или как я могу устранить неполадки?
/** Редактировать **/
Так как тест я создал TestModel, который содержит только идентификатор, созданный сериалайзер для него, зарегистрирован адаптер типа, и добавить его к моей модели пользователя. И он также не может вызвать TestModelSerializer (даже если он сериализуется в соответствии со стандартным методом).
Я не знаком с Королевством, но проблема может быть в том, что, например, UserSerializer запрашивает пользователя во время регистрации адаптера для класса io.realm.UserProxy –
Вы проверили [этот ответ] (http://stackoverflow.com/a/42044320/3503855)? Это обеспечивает ** намного более простой способ обхода Gons + Realm несовместимости. – AnixPasBesoin
Это, к сожалению, не поможет моей конкретной проблеме (я понял, что ниже), но, безусловно, хорошо указать, что сообщение для всех проблем Retrofit-Gson, я имел дело с тем же сценарием несколько недель назад, и потребовалось некоторое время, чтобы выяснить, что происходит. – jwBurnside