简体   繁体   中英

(Parse-SDK) How to access List<ParseObject> from another ParseObject?

I'm using ParseSDK for android project. But I have a problem to access List of ParseObjects from another ParseObject class. I tried a lot of things, but anything didn't help me. Below I put my code.

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: FATAL EXCEPTION: main Process: com.kineticoach.traveltrainer, PID: 22022 java.lang.IllegalStateException: ParseObject has no data for 'name'. Call fetchIfNeeded() to get the data. at com.parse.ParseObject.checkGetAccess(ParseObject.java:3607) at com.parse.ParseObject.getString(ParseObject.java:3186) at com.kineticoach.traveltrainer.models.objects.User.getName(User.java:25) at com.kineticoach.traveltrainer.fragments.ProfileFragment.lambda$loadUserData$1$ProfileFragment(ProfileFragment.java:153) at com.kineticoach.traveltrainer.fragments.-$$Lambda$ProfileFragment$Sdpefi97hyh_jTMOE2pWx3FVbo8.run(Unknown Source:2) at android.os.Handler.handleCallback(Handler.java:874) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:198) at android.app.ActivityThread.main(ActivityThread.java:6729) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Follow this reference

we do not send the nested ParseObject's full data to cloud code. In order to get the data of the nested ParseObject, you have to do a query or fetch. The result you get from cloud code is pretty similar to the result you get from ParseQuery. We represent nested ParseObject as pointer and you have to fetch or query it in order to use it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM