Android 从Parse.com数组列中删除一个对象

Android 从Parse.com数组列中删除一个对象,android,arrays,android-studio,parse-platform,Android,Arrays,Android Studio,Parse Platform,我正在尝试删除parse中存储的数组的一个对象(例如[user1]、[user2]、[user3],我将更改为[user1]、[user3])。我有一个模块类,它存储模块上的不同学生,当用户删除模块时,我想从存储在学生解析数组中的数组中删除他们的userID 如果不可能,如何将整个数组检索到本地arraylist中,编辑它,然后将其放回 我尝试了几件事,但到目前为止都没有成功。这是我当前删除整行而不仅仅是数组的代码: moduleDeleteButton.setOnClickListener(n

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

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

我尝试了几件事,但到目前为止都没有成功。这是我当前删除整行而不仅仅是数组的代码:

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();
                        }
                    }
                });

            }
        });
moduleDeleteButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终视图温度=v;
ParseQuery查询=新的ParseQuery(“模块”);
query.whereEqualTo(“moduleCode”,getItem(position).getModuleCode());
findInBackground(新的FindCallback(){
公共作废完成(列表模块,Parsee异常){
如果(e==null){
for(ParseObject删除:模块){
delete.remove(currentUser.getObjectId());
delete.deleteInBackground();
}
Toast.makeText(temp.getContext(),“Deleted”,Toast.LENGTH_LONG.show();
}否则{
Log.e(“Error”,e.getMessage());
Toast.makeText(temp.getContext(),“删除错误”,Toast.LENGTH_LONG.show();
}
}
});
}
});

谢谢你的帮助

我找到了一种方法,将数组存储在本地,对其进行更改,然后将其发送回parse。这不是最好看的方式,但它奏效了

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();
                                            }
                                        });
                                    }
                                }
                            }
                        }
                    }
                });
            }
        });
moduleDeleteButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
学生=新数组列表();
最终视图温度=v;
ParseQuery=ParseQuery.getQuery(“模块”);
query.whereEqualTo(“moduleCode”,getItem(position).getModuleCode());
findInBackground(新的FindCallback(){
@凌驾
公共作废完成(列表,异常解析){
如果(e==null){
如果(list.size()>0){
parseobjects=list.get(0);
如果(s.getList(“学生”)!=null)
{
学生=s.getList(“学生”);
}
其他的
{
学生=空;
}
如果(学生!=null){
if(students.contains(currentUser.getObjectId())){
移除(currentUser.getObjectId());
s、 把(“学生”,学生);
s、 saveInBackground(新的SaveCallback(){
@凌驾
已完成公共作废(语法异常arg0){
Toast.makeText(temp.getContext(),“Deleted”,Toast.LENGTH_LONG.show();
}
});
}
}
}
}
}
});
}
});

我遇到了同样的问题,使用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");

            }
        }
    });
final ParseObject toBeDeleted=ParseObject.createwithout数据(对象类型,项目ID);
最终ArrayList removeArr=新ArrayList();
removeArr.add(待删除);
ParseQuery=ParseQuery.getQuery(CONTAINER_OBJ);
include(_数组);
getInBackground(id,new GetCallback(){
公共无效完成(ParseObject对象,parsee异常){
如果(e==null){
removeAll(_数组,removeArr);
object.saveInBackground();
}否则{
//出了点问题
}
}
});
toBeDeleted.deleteInBackground(新的DeleteCallback(){
@凌驾
公共作废完成(Parsee异常){
如果(e==null){
Log.v(标记“已删除”+parseType+“成功”);
}
}
});
我希望这将帮助任何需要它的人