【问题标题】:Android, Get a pointer to a ParseObjectAndroid,获取指向 ParseObject 的指针
【发布时间】:2015-06-25 22:47:42
【问题描述】:

如何获得指向解析对象的指针?

例如,我的 ParseUser 有一个名为“school”的列,它是指向 Parse 类“School”的指针

school Pointer<School>

我能够获得 School 类型的 ParseObject,但是,我不知道如何获得指向此 School ParseObject 的指针,因此我可以将它放在 ParseUser 的学校字段中。

我看到了与此类似的帖子,说创建一个没有数据的解析对象并为其提供正确的对象 ID:

ParseObject mySchoolPtr = ParseObject.createWithoutData("School", mySchoolObject.getObjectId());
currentUser.put("school", mySchoolPtr);

但是,在运行此代码后,我的 Parse 用户数据库仅在学校字段中列出“(未定义)”。

下面是一段代码 sn-p 捕获了这整个过程(在 sn-p 之后我进一步解释了 sn-p 中发生的事情):

    String school = schoolEditText.getText().toString().trim();
    String password = passwordEditText.getText().toString().trim();

    final ParseUser currentUser = ParseUser.getCurrentUser();

    currentUser.setPassword(password);

    // Query schools and search for name == school, create pointer for that one and put it for user "school"
    ParseQuery<ParseObject> query = ParseQuery.getQuery("School");
    query.whereEqualTo("name", school);
    query.getFirstInBackground(new GetCallback<ParseObject>() {
        public void done(ParseObject school_found, ParseException e) {
            if (school_found != null) {
                Log.d("School", "Retrieved " + school_found.getString("name"));
                ParseObject myschoolptr = ParseObject.createWithoutData("School", school_found.getObjectId());
                currentUser.put("school", myschoolptr);                            
            } else {
                Log.d("School", "Error: School name not found in Database. " + e.getMessage());
            }
        }
    });
    currentUser.saveInBackground();
    showMainActivity();

在我的 Parse class School 中,我有一列标有名称。 我让用户输入他们的学校,例如“麻省理工学院”。 然后,我在 parse 上查询学校类以获取等效名称。 所以这给了我学校课程的相应 ParseObject 。 我想把它放在 ParseUsers 学校领域。 但是,学校的 ParseUser 字段是指向 School 类的指针。 如何获取指向给定 ParseObject 的指针以放入用户的学校字段?

【问题讨论】:

    标签: android pointers parse-platform


    【解决方案1】:

    您必须在GetCallback 中调用currentUser.saveInBackground(); 才能正确更新:

    ...
    query.getFirstInBackground(new GetCallback<ParseObject>() {
        public void done(ParseObject school_found, ParseException e) {
            if (school_found != null) {
                Log.d("School", "Retrieved " + school_found.getString("name"));
                ParseObject myschoolptr = ParseObject.createWithoutData("School", school_found.getObjectId());
                currentUser.put("school", myschoolptr);        
                currentUser.saveInBackground();      
                showMainActivity();              
            } else {
                Log.d("School", "Error: School name not found in Database. " + e.getMessage());
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      相关资源
      最近更新 更多