RealmList внутри RealmObject не заполняется из json

поэтому я начал играть с Realm, и до сих пор это было довольно понятно для моих простых случаев использования, но я обнаружил, что создание объекта области с realmList внутри него из Json не заполняет список области. Вот что у меня есть:

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

}

оба этих класса имеют соответствующие геттеры и сеттеры в моем реальном коде, я просто включил образец информации и всю важную информацию, чтобы сократить это.

Я использую модификацию, и все данные поступают в виде 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

исключение EDIT: пример json {"places":[{"place_id":1280,"place_name":"Canada"}}]}


person AIntel    schedule 23.07.2015    source источник
comment
Можете ли вы добавить сюда свой ввод JSON? Кажется, это не массив, который вы хотите разобрать на Realm. Должно быть так [{"name": "xxx"}]   -  person beeender    schedule 24.07.2015
comment
Вы решили свою проблему?   -  person feisal    schedule 21.10.2016


Ответы (1)


Я предлагаю вам использовать Gson для работы с JSON. Я успешно использовал Gson, Retrofit и Realm со следующей реализацией.

  1. Построить 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;
                }
            })
    
  2. Добавить Gson в конструктор RestAdapter

    RestAdapter.Builder()
            //.other settings
            .setConverter(new GsonConverter(gson))
            .build();
    
person Ralphilius    schedule 25.07.2015