当前位置:  开发笔记 > 编程语言 > 正文

将Realm对象作为Retrofit 2 PUT请求主体传递

如何解决《将Realm对象作为Retrofit2PUT请求主体传递》经验,为你挑选了1个好方法。

我试图将RealmObject用作Retrofit 2中的PUT消息正文内容。我已经使用JsonSerializer实现了自定义Gson,它在Retrofit之外运行良好,但是我仍然没有在请求正文中获取对象数据。
用于改造和gson的Gradle构建:

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 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() {
        @Override
        public void onResponse(Call call, Response response) {}
        @Override
        public void onFailure(Call call, Throwable t) {}
    });

EpicPandaFor.. 5

这是因为GSON尝试使用反射基于字段对您的对象进行序列化,但是Realm实例数据只能通过代理getter setter方法进行访问。

请参阅相关的未解决问题,因为GSON并不十分在乎,因此没有配置使用getters / setters代替https://github.com/google/gson/issues/232

使用Jackson或LoganSquare json解析器可以做到这一点。

或者,您需要制作RealmObject的非托管副本,可以通过这样做realmObject.copyFromRealm()来创建与Realm分离的类的深层副本。



1> EpicPandaFor..:

这是因为GSON尝试使用反射基于字段对您的对象进行序列化,但是Realm实例数据只能通过代理getter setter方法进行访问。

请参阅相关的未解决问题,因为GSON并不十分在乎,因此没有配置使用getters / setters代替https://github.com/google/gson/issues/232

使用Jackson或LoganSquare json解析器可以做到这一点。

或者,您需要制作RealmObject的非托管副本,可以通过这样做realmObject.copyFromRealm()来创建与Realm分离的类的深层副本。

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有