(Parse-SDK) Как получить доступ к List‹ParseObject› из другого ParseObject?

Я использую ParseSDK для проекта Android. Но у меня проблема с доступом к списку ParseObjects из другого класса ParseObject. Я пробовал много чего, но мне ничего не помогало. Ниже я помещаю свой код.

Team team;

List<User> members = team.getMembers();
for(User user : members) {
  user.getName();
}

@ParseClassName("Team")
public class Team extends ParseObject {

    public static class Constant {
        private static final String CREATED_BY = "createdBy";
        private static final String NAME = "name";
        public static final String CODE = "code";
        private static final String PARTICIPANTS = "participants";
        public static final String IS_ACTIVE = "isActive";
    }

    private String name;
    private String code;
    private User createdBy;
    private List<User> members;
    private int isActive;

    public String getName() {
        return getString(Constant.NAME);
    }

    public void setName(String name) {
        this.name = name;
        put(Constant.NAME, name);
    }

    public String getCode() {
        return getString(Constant.CODE);
    }

    public void setCode(String code) {
        this.code = code;
        put(Constant.CODE, code);
    }

    public User getCreatedBy() {
        return (User) getParseUser(Constant.CREATED_BY);
    }

    public void setCreatedBy(User createdBy) {
        this.createdBy = createdBy;
        put(Constant.CREATED_BY, createdBy);
    }

    public List<User> getMembers() {
        return getList(Constant.PARTICIPANTS);
    }

    public void setMembers(List<User> members) {
        this.members = members;
        put(Constant.PARTICIPANTS, members);
    }

    public int getIsActive() {
        return getInt(Constant.IS_ACTIVE);
    }

    public void setIsActive(int isActive) {
        this.isActive = isActive;
        put(Constant.IS_ACTIVE, isActive);
    }

@ParseClassName("_User")
public class User extends ParseUser {

    private static class Constant {
        private static final String NAME = "name";
        private static final String GENDER = "gender";
        private static final String BIRTHDATE = "birthdate";
        private static final String FACEBOOK_ID = "facebookId";
        private static final String AVATAR = "avatar";
        private static final String WEIGHT = "weight";
        private static final String WEIGHT_UNIT = "weightUnit";
        private static final String EXPERIENCE_LEVEL = "experienceLevel";
        private static final String GOALS = "goals";
        private static final String SCORE = "score";
        private static final String IS_PREMIUM = "isPremium";
        private static final String IS_TRIAL_PERIOD = "isTrialPeriod";
        private static final String TOTAL_WORKOUT_BUILDS = "totalWorkoutBuilds";
    }

    private String name;
    private String gender;
    private String facebookId;
    private Date birthday;
    private ParseFile avatar;
    private int weight;
    private String weighUnit;
    private String experienceLevel;
    private List<Goal> goals;
    private int score;
    private int isPremium;
    private int isTrialPeriod;
    private int totalWorkoutBuilds;
    private String emailAddress;

    public User() {
        super();
    }

    public String getName() {
        return validateStringResult(Constant.NAME);
    }

    public void setName(String name) {
        put(Constant.NAME, name);
    }

    public String getGender() {
        return validateStringResult(Constant.GENDER);
    }

    public void setGender(String gender) {
        put(Constant.GENDER, gender);
    }

    public Date getBirthday() {
        return getDate(Constant.BIRTHDATE);
    }

    public void setBirthday(Date birthday) {
        put(Constant.BIRTHDATE, birthday);
    }

    public String getFacebookId() {
        return validateStringResult(Constant.FACEBOOK_ID);
    }

    public void setFacebookId(String facebookId) {
        put(Constant.FACEBOOK_ID, facebookId);
    }

    public ParseFile getAvatar() {
        return getParseFile(Constant.AVATAR);
    }

    public void setAvatar(ParseFile avatar) {
        put(Constant.AVATAR, avatar);
    }

    public int getWeight() {
        return getInt(Constant.WEIGHT);
    }

    public void setWeight(int weight) {
        put(Constant.WEIGHT, weight);
    }

    public String getWeightUnit() {
        return validateStringResult(Constant.WEIGHT_UNIT);
    }

    public void setWeightUnit(String weightUnit) {
        put(Constant.WEIGHT_UNIT, weightUnit);
    }

    public ExperienceLevel getExperienceLevel() {
        final String result = validateStringResult(Constant.EXPERIENCE_LEVEL);
        if (result.equalsIgnoreCase("intermediate")) {
            return ExperienceLevel.INTERMEDIATE;
        } else if (result.equalsIgnoreCase("advanced")) {
            return ExperienceLevel.ADVANCED;
        } else {
            return ExperienceLevel.BEGINNER;
        }
    }

    public void setExperienceLevel(String experienceLevel) {
        put(Constant.EXPERIENCE_LEVEL, experienceLevel);
    }

    public List<Goal> getGoals() {
        return getList(Constant.GOALS);
    }

    public void setGoals(List<Goal> goals) {
        put(Constant.GOALS, goals);
    }

    public int getScore() {
        return getInt(Constant.SCORE);
    }

    public void setScore(int score) {
        put(Constant.SCORE, score);
    }

    public boolean isPremium() {
        return getBoolean(Constant.IS_PREMIUM);
    }

    public void setPremium(boolean premium) {
        put(Constant.IS_PREMIUM, premium);
    }

    public boolean isTrialPeriod() {
        return getBoolean(Constant.IS_TRIAL_PERIOD);
    }

    public void setTrialPeriod(boolean trialPeriod) {
        put(Constant.IS_TRIAL_PERIOD, trialPeriod);
    }

    public int getTotalWorkoutBuilds() {
        return getInt(Constant.TOTAL_WORKOUT_BUILDS);
    }

    public void setTotalWorkoutBuilds(int totalWorkoutBuilds) {
        put(Constant.TOTAL_WORKOUT_BUILDS, totalWorkoutBuilds);
    }

    private String validateStringResult(String key) {
        final String result = getString(key);
        return result == null ? "" : result;
    }

E/AndroidRuntime: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.kineticoach.traveltrainer, PID: 22022 java.lang.IllegalStateException: ParseObject не имеет данных для «имени». Вызовите fetchIfNeeded(), чтобы получить данные. в com.parse.ParseObject.checkGetAccess(ParseObject.java:3607) в com.parse.ParseObject.getString(ParseObject.java:3186) в com.kineticoach.traveltrainer.models.objects.User.getName(User.java:25 ) на com.kineticoach.traveltrainer.fragments.ProfileFragment.lambda$loadUserData$1$ProfileFragment(ProfileFragment.java:153) на com.kineticoach.traveltrainer.fragments.-$$Lambda$ProfileFragment$Sdpefi97hyh_jTMOE2pWx3FVbo8.run(Неизвестный источник: 2) на android.os.Handler.handleCallback(Handler.java:874) на android.os.Handler.dispatchMessage(Handler.java:100) на android.os.Looper.loop(Looper.java:198) на android.app. ActivityThread.main(ActivityThread.java:6729) в java.lang.reflect.Method.invoke(собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) в com.android. внутренний.os.ZygoteInit.main(ZygoteInit.java:858)


person Nimantha    schedule 05.09.2019    source источник


Ответы (1)


Следуйте этой ссылке

мы не отправляем полные данные вложенного объекта ParseObject в облачный код. Чтобы получить данные вложенного ParseObject, вам нужно выполнить запрос или выборку. Результат, который вы получаете от облачного кода, очень похож на результат, который вы получаете от ParseQuery. Мы представляем вложенный ParseObject в виде указателя, и вам нужно получить или запросить его, чтобы использовать.

person Nimantha    schedule 05.09.2019