2016-07-20 13 views
0

Retrofit 2でPUTメッセージ本文のコンテンツとしてRealmObjectを使用しようとしています。JsonSerializerでカスタムGsonを実装していますが、Retrofit以外でも正常に動作しますが、リクエスト本体のデータ。改造とgsonため
Gradleのビルド:
Realmオブジェクトを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インスタンスのデータにはアクセスできません。プロキシゲッターセッターメソッドを使用します。

GSONが本当に気にしないので、ゲッター/セッターを使用するための設定の代わりにhttps://github.com/google/gson/issues/232

を持っていません。これは、ジャクソンやLoganSquare JSONパーサで可能であるため、関連の未解決の問題を参照してください。

RealmObjectのアンマネージコピーを作成する必要があります。これはrealmObject.copyFromRealm()で行うことができ、レルムから切り離されたクラスのディープコピーを作成します。

関連する問題