【问题标题】:insert or update values from retrofit to realm插入或更新从改造到领域的值
【发布时间】:2016-03-30 11:11:21
【问题描述】:

我正在使用我的自定义类从改造中获得 arraylist。我通过扩展RealmObject 将同一类转换为领域。但我无法添加数据或创建对象。如何将相同的数据写入/更新到领域?

我的改造回调:

Callback<ArrayList<CustomModel>> callback);

改造代码:

 @Override
            public void success(ArrayList<CustomModel> mycustomListModel, Response response) {

                        realm.beginTransaction();
                        realm.copyToRealmOrUpdate(mycustomListModel);
                        realm.commitTransaction();
}

【问题讨论】:

    标签: android retrofit realm


    【解决方案1】:
    1. 首先要做的事:使用在线生成器创建一个普通的旧 Java 对象 (POJO),该生成器将您的 json 字符串转换为 Java 对象。这是该工具的链接:jsonschema2pojo
    2. 创建您将用于存储数据的 Realm 对象。现在,由于您要返回数据列表,因此您必须循环访问,并且不能在不验证的情况下存储它们!!

    请注意,Retrofit 返回的 TYPE 是您的 POJO 类,而不是您的 Model 类。

    由于POJO类有对应的字段作为Model,所以每次循环都要创建一个新的Model对象,然后从pOJO类中拉取字段并设置到Realm模型上;然后最后 copyToRealm 并提交您的事务。

    我希望这可以帮助您了解其工作原理!

    【讨论】:

    • 在循环中执行此操作时如何创建或更新。我在看 stackoverflow.com/questions/29056606/… 。你能推荐类似的吗?
    • 所以基本上,由于改造代码会返回一个对象列表,您可以在 Java 中使用 foreach 循环 (for(YourPojoClass pojo : mycustomListModel){ //然后在此处为您的 realmobj 创建一个新模型实例并从 pojo} 添加字段
    【解决方案2】:

    您可以从 RealmObject 扩展您的 CustomModel

    然后设置 gson 进行正确解析。

    Gson gson = new GsonBuilder()
        .setExclusionStrategies(new ExclusionStrategy() {
            @Override
            public boolean shouldSkipField(FieldAttributes f) {
                return f.getDeclaringClass().equals(RealmObject.class);
            }
    
            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
                return false;
            }
        })
        .create();
    

    现在您可以将对象与 Retrofit 一起使用。无需创建单独的类。

    https://realm.io/docs/java/latest/#gson

    【讨论】:

    • 我不会创建两个 pojo 类,而是使用这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多