RoboSpice с Gson и Realm
Я использую RoboSpice с GsonSpringAndroidSpiceService. Я также хочу добавить Realm для сохранения данных.
проблема в том, что в области каждый объект должен расширять realmObject, но gson в roboSpice пытается проанализировать realmObject вместо того, чтобы игнорировать его.
Я пытался добавить исключение Stategy:
Gson gson = 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; } }) .create();
затем
GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter(gson);
также попытался (отдельно) добавить @expose к полям в объекте, и
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
в двух случаях у меня одна и та же ошибка:
09-07 11: 21: 04.615 8443-8443 / com.mm.rsApp D / OpenGLRenderer ﹕ Включение режима отладки 0 09-07 11:21:04.620 8443-8443/com.mm.rsApp D//SpiceManager.java:1018﹕ 11:21:04.625 main Привязано к сервису: GsonSpiceService 09-07 11:21:04.625 8443-8466/com.mm.rsApp D//SpiceManager.java:1133﹕ 11:21:04.628 Нить-16362 С привязкой ок. 09-07 11:21:04.690 8443-8443/com.mm.rsApp I/ Временная шкала line Временная шкала: Идентификатор идентификатора активности: android.os.BinderProxy@41b8f088 время:525639153 09-07 11:21:21.890 8443-8466/ ком.mm.rsApp D//SpiceManager.java:245﹕ 11:21:21.896 Thread-16362 Отправка запроса на обслуживание: CachedSpiceRequest 09-07 11:21:21.895 8443-8466/com.mm.rsApp D//RequestProcessor.java:70﹕ 11:21:21.898 Поток-16362 Добавление запроса в очередь 1103121632: CachedSpiceRequest [requestCacheKey=login, cacheDuration=-1, spiceRequest=com.mm.rsApp.requests.BaseRequest@41d700c0] размер равен 0 09-07 11:21:21.900 8443-8466/com.mm.rsApp D//RequestProcessor.java:89﹕ 11:21:21.902 Thread-16362 Добавление записи для класса типа com.mm.rsApp.model.LoginResult и cacheKey login. 09-07 11:21:21.900 8443-8466/com.mm.rsApp D//RequestProgressManager.java:54 11: 21: 21.904 Поток-16362 Обнаружен запрос при добавлении прослушивателей запросов к существующим запросам. 09-07 11:21:21.900 8443-8466/com.mm.rsApp D//RequestProgressManager.java:64﹕ 11:21:21.905 Тема-16362 Ход отправки ОЖИДАНИЕ 09-07 11:21:21.905 8443-8609/com.mm.rsApp D//RequestRunner.java:68﹕ 11:21:21.908 Thread-16369 Обработка запроса: CachedSpiceRequest [requestCacheKey=login, cacheDuration=-1, spiceRequest=com.mm.rsApp.requests.BaseRequest@41d700c0] 09-07 11:21:21.905 8443-8609/com.mm.rsApp D//RequestRunner.java:114﹕ 11:21:21.910 Поток-16369 Содержимое кэша недоступно, срок его действия истек или отключен 09-07 11:21:21.910 8443-8609/com.mm.rsApp D//RequestRunner.java:128﹕ 11:21:21.913 Thread-16369 Вызов запроса netwok. 09-07 11:21:21.910 8443-8609/com.mm.rsApp D//RequestProgressManager.java:64﹕ 11:21:21.914 Thread-16369 Ход отправки LOADING_FROM_NETWORK 09-07 11:21:21.915 8443-8443/com.mm.rsApp V//DefaultRequestProgressReporter.java:110﹕ 11:21:21.917 main Уведомление 1 слушателей о прогрессе com.octo.android.robospice.request.listener.RequestProgress@41d71138 09-07 11:21:21.915 8443-8443/com.mm.rsApp V//DefaultRequestProgressReporter.java:110﹕ 11:21:21.921 main Уведомление 1 слушателей о прогрессе com.octo.android.robospice.request.listener.RequestProgress@41d83c50 09-07 11:21:27.255 8443-8609/com.mm.rsApp D//RequestRunner.java:131﹕ 11:21:27.257 Поток-16369 Сетевой запрос завершен. 09-07 11:21:27.255 8443-8609/com.mm.rsApp D//RequestRunner.java:151﹕ 11:21:27.259 Thread-16369 Запуск содержимого кэширования... 09-07 11:21:27.260 8443-8609/com.mm.rsApp D//RequestProgressManager.java:64﹕ 11:21:27.262 Thread-16369 Ход отправки WRITING_TO_CACHE 09-07 11:21:27.260 8443-8443/com.mm.rsApp V//DefaultRequestProgressReporter.java:110﹕ 11:21:27.265 main Уведомление 1 слушателя о прогрессе com.octo.android.robospice.request.listener.RequestProgress@41e12c08 09-07 11:21:27.440 8443-8609/com.mm.rsApp I/dalvikvm﹕ threadid=18: переполнение стека при вызове Lcom/google/gson/internal/$Gson$Types;.resolve:LLLL 09-07 11:21:27.440 8443-8609/com.mm.rsApp I/dalvikvm﹕ метод требует 96+20+12=128 байт, fp - 0x5deea348 (72 слева) 09-07 11:21:27.440 8443-8609/com.mm.rsApp I/dalvikvm end конец расширяемого стека (от 0x5deea300 до 0x5deea000) 09-07 11:21:27.440 8443-8609/com.mm.rsApp I/dalvikvm stack Сжатый стек (до 0x5deea300, curFrame равен 0x5deeac94) 09-07 11:21:27.480 8443-8609/com.mm.rsApp D// Запрос Runner.java:199﹕ 11:21:27.482 Thread-16369 Произошла непредвиденная ошибка при обработке запроса CachedSpiceRequest [requestCacheKey = login, cacheDuration = -1, spiceRequest=com.mm.rsApp.requests.BaseRequest@41d700c0] java.lang. StackruError на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal. $ Gson $ Types.resolve ($ Gson $ Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal. $ Gson $ Types.resolve ($ Gson $ Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal. $ Gson $ Types.resolve ($ Gson $ Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal. $ Gson $ Types.resolve ($ Gson $ Types.java:381) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:356) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:141) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.crey)..google.gson.Gson.getAdapter(Gson.java:359) на com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:122) на com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46) по адресу com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.(ReflectiveTypeAdapterFactory.java:92) в файле com.google.bind:91) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:142) по адресу com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveType.gt.jav). gson.Gson.getAdapter (Gson.java:359) по адресу com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:122) по адресу com.google.gson.internal.bind.ReflecessTactFact.Typeter ().java: 46) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.(ReflectiveTypeAdapterFactory.java:92) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundFieldAdleter rFactory.java:91) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields (ReflectiveTypeAdapterFactory.java:142) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.cTate.jpg.google.gson.Gson.getAdapter(Gson.java:359) на странице com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:122) на странице com.google.gson.internal.bind.AdapterT 100 долларов США (ReflectiveTypeAdapterFactory.java:46) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory 1 доллар США. (ReflectiveTypeAdapterFactory.java:92) в com.google.gson.internal.bind.ReflectiveTypeAdaprectiveFytoFateFactoryForyFactoryForyTyFF () по адресу com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields (ReflectiveTypeAdapterFactory.java:142) по адресу com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdjsonGact.g).getAda
пожалуйста, помогите мне с любой идеей, почему я получаю эту ошибку и как я могу ее исправить
1 ответ
я использовал Robospice
с Retrofit
а также Realm
,
Я решил это, переопределив createConverter()
в моем Service
класс, который расширяется RetrofitGsonSpiceService
, К сожалению, я не могу сказать более понятным, потому что я не использовал GsonSpringAndroidSpiceService
,
Так по моему Service
Класс это выглядело так:
@Override
protected Converter createConverter() {
Gson gson = 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;
}
})
.create();
return new GsonConverter(gson);
}
Так что идея состоит в том, чтобы найти, где Gson
может быть инициализирован с конфигурацией по умолчанию. И именно поэтому я передал вышеупомянутую конфигурацию Retrofit
также.
new RestAdapter.Builder()
.setConverter(new GsonConverter(gson))
.build();
Надеюсь, поможет.