java - (Parse-SDK) 如何从另一个ParseObject访问List<ParseObject>?

标签 java android parse-android-sdk

我正在为 android 项目使用 ParseSDK。但我在从另一个 ParseObject 类访问 ParseObjects 列表时遇到问题。我尝试了很多事情,但任何事情都对我没有帮助。下面我放了我的代码。

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

我们不会将嵌套 ParseObject 的完整数据发送到云代码。为了获取嵌套 ParseObject 的数据,您必须执行查询或获取。从云代码获得的结果与从 ParseQuery 获得的结果非常相似。我们将嵌套的 ParseObject 表示为指针,您必须获取或查询它才能使用它。

关于java - (Parse-SDK) 如何从另一个ParseObject访问List<ParseObject>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57799319/

相关文章:

java - 创建文件夹

java - 一个支持集群的 IoC 框架 - 您认为它应该做什么?

java - 如何在java中将字符串列表转换为列表对象?

java - 如何对编程特别是 java 和 android 产生兴趣

java - Spring @Async 被忽略

android - 如何将android应用程序的代码转换为symbian

android - 在 Facebook 中发送消息时丢失消息或附件错误

java - com.parse.ParseObject 无法转换为

java - 从 ParseQuery 方法返回的字符串为 null

parse-platform - 解析服务器 - 从包含的对象中选择几个字段