java语言 如何查询_File表中的数据,并且删除指定的数据?

同一个用户需要上传多个文件,保留两到三个文件,需要删除之前的旧文件。
不知道以下代码是否正确,如果正确如何得到url并删除?

AVQuery query = AVQuery.getQuery("_File");
query.findInBackground(new FindCallback() {
@Override
public void done(List list, AVException e) {
//list为空
}

            @Override
            protected void internalDone0(Object o, AVException e) {
                List<AVObject> list = (List) o;
                for (AVObject file : list) {
                    Date createTime = (Date) file.get("createdAt");
                    AVObject url = (AVObject) file.get("serverData");
                }
            }
        });

默认情况下,文件的删除权限是关闭的,需要进入 控制台 > 存储 > _File,选择菜单 其他 > 权限设置 > delete 来开启。

file.delete();

借楼请教老师一个问题,swift SDK Find 到的 result 如何转为JSON?


删除已经打开,上面是截图
代码如下
现在报错:
File object is not exists.
AVQuery query = AVQuery.getQuery("_File");
query.findInBackground(new FindCallback() {
@Override
public void done(List list, AVException e) {
//
}

                        @Override
                        protected void internalDone0(Object o, AVException e) {
                            List<AVObject> list = (List) o;
                            if (list.size() > 3) {//一个用户保留三个数据库文件
                                for (int i = 0; i < list.size() - 3; i++) {
                                    String url = (String) list.get(i).get("url");
                                    AVFile deleteFile = new AVFile();
                                    deleteFile.setUrl(url);
                                    Log.i("删除file url", url);
                                    deleteFile.deleteInBackground(new DeleteCallback() {
                                        @Override
                                        public void done(AVException e) {
                                            if (e == null) {
                                                Log.i("删除file===============", "数据删除成功");
                                            } else {
                                                Log.i("删除file===============", e.getMessage().toString());
                                            }
                                        }
                                    });
                                }

                            }
                        }
                    });

您好,您删除的是您新建的 AVFile,这样的思路是不对的。您要根据 objectId 找到要删除的那条 file 数据,然后执行 file.delete() 删除。

问题已解决,多谢!
AVQuery query = AVQuery.getQuery("_File");
query.orderByAscending("createdAt");//排序
query.findInBackground(new FindCallback() {
@Override
public void done(List list, AVException e) {
}

                        @Override
                        protected void internalDone0(Object o, AVException e) {
                            //TODO 是否一个用户会删除其他用户数据???
                            List<AVObject> list = (List) o;
                            if (list.size() > 3) {//一个用户保留三个数据库文件
                                for (int i = 0; i < list.size() - 3; i++) {
                                    String id = list.get(i).getObjectId();
                                    AVQuery<AVObject> avQuery = new AVQuery<>("_File");
                                    avQuery.getInBackground(id, new GetCallback<AVObject>() {
                                        @Override
                                        public void done(AVObject avObject, AVException e) {
                                            if (e == null) {
                                                avObject.deleteInBackground(new DeleteCallback() {
                                                    @Override
                                                    public void done(AVException e) {
                                                        if (e == null) {
                                                            Log.i("delete success", "删除成功");
                                                        } else {
                                                            Log.i("delete error", e.getMessage().toString());
                                                        }
                                                    }
                                                });
                                            } else {
                                                Log.i("delete error", e.getMessage().toString());
                                            }
                                        }
                                    });

                                }

                            }
                        }
                    });