2016-07-20 13 views
0

Ich versuche RealmObject als PUT Nachricht Body Inhalt in Retrofit 2 zu verwenden. Ich habe benutzerdefinierte Gson mit JsonSerializer implementiert und es funktioniert gut außerhalb von Retrofit, aber ich bekomme immer noch kein Objekt Daten im Anfragetext.
Gradle für die Nachrüstung und Gson bauen:
Realm Objekt übergeben als Retrofit 2 PUT Anfrage Körper

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' 

Retrofit Service:

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


Gebäudesanierung:

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

* Ich bekomme immer noch keine Objektdaten im Anfragetext. * Was bekommen Sie dann? –

+0

kann es sein, ist es nicht möglich, ich bin nicht 100% sicher, aber Sie verweisen diesen Link https://realm.io/docs/java/latest/#what-is-the-difference-between-a-normal-java-Objekt -und-a-realm-object – iAndroid

+0

Welchen Statuscode bekommen Sie? –

Antwort

3

Es ist, weil Gson versucht, Ihr Objekt basierend auf serialisiert Felder, die Reflektion verwenden, aber die Realm-Instanzdaten sind nur t zugänglich durch die Proxy-Getter-Setter-Methoden.

Siehe zusammenhängende offene Frage, weil Gson nicht wirklich kümmern und deshalb nicht Config hat die Getter/Setter statt https://github.com/google/gson/issues/232

Diese zu verwenden ist möglich, mit Jackson oder LoganSquare json Parsern.

Oder Sie müssen eine nicht verwaltete Kopie Ihres RealmObject erstellen, die mit realmObject.copyFromRealm() erstellt werden kann, die eine tiefe Kopie Ihrer Klasse erzeugt, die vom Realm getrennt ist.