【问题标题】:Remove one object from Parse.com Array column从 Parse.com Array 列中删除一个对象
【发布时间】:2015-04-11 12:01:52
【问题描述】:

我正在尝试为存储在 parse 中的数组删除一个对象(例如 [user1]、[user2]、[user3],我要更改为 [user1]、[user3])。我有一个模块类,它在模块上存储不同的学生,当用户删除模块时,我想从存储在学生解析数组中的数组中删除他们的用户 ID。

如果不可能,如何将整个数组检索到本地数组列表中,编辑它,然后放回去?

我尝试了一些事情,但到目前为止都没有奏效。这是我当前的代码,它删除整行而不仅仅是数组:

moduleDeleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final View temp = v;
                ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Module");
                query.whereEqualTo("moduleCode", getItem(position).getModuleCode());
                query.findInBackground(new FindCallback<ParseObject>() {
                    public void done(List<ParseObject> module, ParseException e) {
                        if (e == null) {
                            for (ParseObject delete : module) {
                                delete.remove(currentUser.getObjectId());
                                delete.deleteInBackground();
                            }
                            Toast.makeText(temp.getContext(), "Deleted", Toast.LENGTH_LONG).show();
                        } else {
                            Log.e("Error", e.getMessage());
                            Toast.makeText(temp.getContext(), "Error deleting", Toast.LENGTH_LONG).show();
                        }
                    }
                });

            }
        });

感谢您的帮助!

【问题讨论】:

    标签: android arrays android-studio parse-platform


    【解决方案1】:

    我找到了一种方法,它获取数组并将其存储在本地,对其进行更改,然后将其发送回解析。不是最好看的方式,但它有效!

    moduleDeleteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    students = new ArrayList<String>();
                    final View temp = v;
                    ParseQuery<ParseObject> query = ParseQuery.getQuery("Module");
                    query.whereEqualTo("moduleCode",getItem(position).getModuleCode());
                    query.findInBackground(new FindCallback<ParseObject>() {
                        @Override
                        public void done(List<ParseObject> list, ParseException e) {
                            if (e==null) {
                                if (list.size()>0) {
                                    ParseObject s = list.get(0);
                                    if (s.getList("students")!=null)
                                    {
                                        students = s.getList("students");
                                    }
                                    else
                                    {
                                        students = null;
                                    }
                                    if (students!=null) {
                                        if (students.contains(currentUser.getObjectId())) {
                                            students.remove(currentUser.getObjectId());
                                            s.put("students",students);
                                            s.saveInBackground(new SaveCallback() {
                                                @Override
                                                public void done(ParseException arg0) {
                                                    Toast.makeText(temp.getContext(), "Deleted", Toast.LENGTH_LONG).show();
                                                }
                                            });
                                        }
                                    }
                                }
                            }
                        }
                    });
                }
            });
    

    【讨论】:

      【解决方案2】:

      我也遇到过同样的问题,使用 removeAll(...) 解决了一些不同的问题。 在我的情况下,我需要删除一个 ParseObject,然后从另一个 ParseObject 内的数组中删除 - 我们称之为容器。

          final ParseObject toBeDeleted = ParseObject.createWithoutData(OBJ_TYPE, ITEM_ID);
      
          final ArrayList<ParseObject> removeArr = new ArrayList<>();
          removeArr.add(toBeDeleted);
      
          ParseQuery<ParseObject> query = ParseQuery.getQuery(CONTAINER_OBJ);
          query.include(THE_ARRAY);
          query.getInBackground(protestID, new GetCallback<ParseObject>() {
              public void done(ParseObject object, ParseException e) {
                  if (e == null) {
                      object.removeAll(THE_ARRAY, removeArr);
                      object.saveInBackground();
                  } else {
                      // something went wrong
                  }
              }
          });
      
          toBeDeleted.deleteInBackground(new DeleteCallback() {
              @Override
              public void done(ParseException e) {
                  if (e == null) {
                      Log.v(TAG, "deleted " + parseType + " successfully");
      
                  }
              }
          });
      

      我希望这将帮助其他需要它的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-08
        • 2021-07-11
        • 1970-01-01
        • 2015-04-14
        • 2020-11-07
        • 2016-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多