RealmObject中的RealmList没有从json

时间:2015-07-23 20:40:12

标签: android realm realm-list

所以我开始玩Realm,到目前为止,我对我的简单用例已经非常不言自明了,但我发现从Json创建一个带有realmList的领域对象并没有填充领域列表。这就是我所拥有的:

public class User extends RealmObject{

    @PrimaryKey
    private int user_id;

    private RealmList<Place> places;

    private String fname;

    private String lname;

    private String birth_date;

    public RealmList<Place> getPlaces(){
        return this.places;
    }

    public void setPlaces(RealmList<Place>places) {
        this.places = places;
    }
}


public class Place extends RealmObject{

    private String place_name;
    //several other types all ints and Strings with getters and setters

}

这两个类在我的实际代码中都有适当的getter和setter我只是包含了一个信息样本和所有重要信息来缩短它。

我正在使用改造,所有数据都以jsonelements形式出现。

userService.requestProfile(new Callback<JsonElement>() {
        @Override
        public void success(JsonElement profileResponse, Response response) {
            Log.d(TAG, profileResponse.toString()); //shows raw response containing multiple places objects
            realm.beginTransaction();

            User user  = null;
            try {
                user = (User)realm.createObjectFromJson(User.class, profileResponse.toString());
            }catch (RealmException re){
                re.printStackTrace();
            }
            if(user != null) {
                Log.d(TAG, user.getFname()); //comes out correctly
                Log.d(TAG, user.getPlaces().size()) //always says 0
            }
            realm.commitTransaction();


        }

        @Override
        public void failure(RetrofitError error) {
            error.getCause();
        }
    });

当我在用户上调用getPlaces时,知道为什么我没有看到任何内容吗?我已经尝试在领域对象中嵌入领域对象,看起来很好,只有realmList似乎给我一个问题。在调用createObject时,我不确定数据是否首先被保存到域中。我也试过createAllFromJson,但我得到了一个

Could not create JSON array from string

例外 编辑:示例json     { “地点”:[{ “place_id”:1280, “PLACE_NAME”: “加拿大”}}]}

1 个答案:

答案 0 :(得分:0)

我建议你用Gson来处理JSON。我已经成功地使用了Gson,Retrofit和Realm。

  1. 使用排除策略构建gson

    negative value
  2. 将Gson添加到RestAdapter构建器

    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;
                }
            })