2016-04-29 5 views
0

я пытаюсь получить данные из Realm и отправив его на сервер, используя retrofit и для разбора и сериализации я использую LoganSquareне может быть отображен в объект JSON в Logansquare

client = new Retrofit.Builder() 
         .baseUrl(REST_ENDPOINT) 
         .client(okHttpClient) 
         .addConverterFactory(LoganSquareConverterFactory.create()) 
         .build(); 

это как я доступ запись

Appointment appointments = DB.getInstance(mContext).selectNotSyncAppointmentsData(); 
     RestApi.AppointmentsDataApi service = getAppointmentsDataApi(); 
     Call<APResponse> call = service.createUpdateAppointmentsData(appointments); 

я получаю следующее сообщение об ошибке

createUpdateAppointmentData : onFailure Class io.realm.AppointmentRealmProxy could not be mapped to a JSON object. Perhaps it hasn't been annotated with @JsonObject? 

ответ

0

Я не знаком с тем, как работает LoganSquare, но имейте в виду, что Realm работает с чем-то прокси-классами, которые расширяют все ваши классы моделей. Вы можете их распознать, так как они называются <ModelClass>RealmProxy. Похоже, вам почему-то нужно найти способ настроить LoganSquare для распознавания этих подклассов.

В качестве альтернативы вы можете использовать realm.copyFromRealm(appointments). Это даст вам копию в памяти всех данных, которые относятся к правильному классу.

+0

LoganSquare использует APT для генерации ' $$ JsonObjectMapper' классов, используя аннотации' @ JsonObject' и '@ JsonField' для класса и его полей соответственно. Класс 'LoganSquare' также помещает свои сгенерированные классы $$ ObjectMapper' в карту, отображаемую в' new ConcurrentHashMap () '. Проблема в том, что класс 'RealmProxy' не получает свой собственный' SomethingRealmProxy $$ JsonObjectMapper', который обрабатывал бы класс, как обычный 'Something', поэтому' Map' не содержит 'JsonObjectMapper' для класса 'SomethingRealmProxy', только для' Something'. – EpicPandaForce

+1

Если есть место, где такой взломанный Mapper можно было бы обучать (без аннотации прокси с помощью '@ JsonObject'), он использует тот факт, что LoganSquare пытается снова найти соответствующий ObjectMapper:' Class mapperClass = Class.forName (cls.getName() + Constants.MAPPER_CLASS_SUFFIX); 'где суффикс класса' $$ JsonObjectMapper' – EpicPandaForce