简体   繁体   English

(Parse-SDK) 如何访问列表<ParseObject>来自另一个 ParseObject?

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

I'm using ParseSDK for android project.我正在将 ParseSDK 用于 android 项目。 But I have a problem to access List of ParseObjects from another ParseObject class.但是我在从另一个 ParseObject 类访问 ParseObjects 列表时遇到问题。 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'. E/AndroidRuntime:致命异常:主进程:com.kineticoach.traveltrainer,PID:22022 java.lang.IllegalStateException:ParseObject 没有“名称”的数据。 Call fetchIfNeeded() to get the data.调用 fetchIfNeeded() 来获取数据。 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)在 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_jTMOE2pWx3(Unknown Source:153)在 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) 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.我们不会将嵌套的 ParseObject 的完整数据发送到云代码。 In order to get the data of the nested ParseObject, you have to do a query or fetch.为了获取嵌套 ParseObject 的数据,您必须进行查询或获取。 The result you get from cloud code is pretty similar to the result you get from ParseQuery.您从云代码获得的结果与您从 ParseQuery 获得的结果非常相似。 We represent nested ParseObject as pointer and you have to fetch or query it in order to use it.我们将嵌套的 ParseObject 表示为指针,您必须获取或查询它才能使用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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