2016-07-20 4 views
0

Я пытаюсь использовать RealmObject в качестве содержимого тела сообщения PUT в Retrofit 2. Я внедрил пользовательский Gson с JsonSerializer и отлично работает за пределами Retrofit, но я все еще не получаю объект данные в теле запроса.
Gradle построить для модернизации и gson:
Передача объекта Realm as Retrofit 2 Тело запроса PUT

compile 'com.google.code.gson:gson:2.6.2' 
compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.retrofit2:converter-gson:2.1.0' 

дооснащения обслуживание:

public interface LogstashRetrofitService { 
    @PUT(LOGSTASH_SERVER_PATH) 
    Call<ResponseBody> putLogstashMessage(@Body LogstashMessage logstashMessage); 
} 


Строительство Переоборудование:

Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(LOGSTASH_SERVER_HOST) 
      .addConverterFactory(GsonConverterFactory.create(RealmObjectGsonBuilder.getRealmGson())) 
      .client(httpClient.build()) 
      .build(); 
logstashRetrofitService = retrofit.create(LogstashRetrofitService.class); 
logstashRetrofitService.putLogstashMessage(logstashMessage).enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {} 
     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) {} 
    }); 
+0

* Я все еще не получаю данные объекта в теле запроса. * Что вы получаете тогда? –

+0

Возможно, это невозможно. Я не уверен на 100%, но вы ссылаетесь на эту ссылку https://realm.io/docs/java/latest/#what-is-the-difference-between-a-normal-java-object -and-a-realm-object – iAndroid

+0

Какой код статуса вы получаете? –

ответ

3

Это потому, что GSON пытается сериализовать объект, основанный на поля с использованием отражения, но данные экземпляра Realm доступны только t с помощью методов установки прокси-приемника.

См, связанные с открытым вопрос, потому что GSON действительно не заботится, и поэтому не имеет конфигурации, чтобы использовать геттеры/сеттеры вместо https://github.com/google/gson/issues/232

Это возможно с Джексон или LoganSquare JSon анализаторами.

Или вам необходимо создать неуправляемую копию вашего объекта RealmObject, которая может быть выполнена с помощью realmObject.copyFromRealm(), которая создает глубокую копию вашего класса, отделенного от Царства.

Смежные вопросы