如何删除比现在更早的所有对象?

时间:2014-04-19 18:08:44

标签: android parse-platform

我正在开发Android应用程序,并且有一个用户可以更新其“选择”的类。这是来自用户安装应用程序时出现的对话框,但他也可以稍后通过溢出访问它。在启动时,根据用户的选择,我在Parse.com上传了一个类NCUP.class。但是当用户点击溢出图标来更改首选项时,我想通过删除所有以前的记录并添加新记录来“刷新”该表。我之前使用的是SQLite数据库而我刚刚使用

database.delete(MySQLiteHelper.TABLE_NCUP, null, null);

现在,我可以想到三种方式:

  1. (目前正在进行)用户在选择pref后单击“完成”时,我会通过下面的代码删除表中的所有对象,但对于包含13个条目的类,这需要5秒钟。 :

        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date = new Date();
    String current = dateFormat.format(date);
    
    ParseQuery<NCUP> query = ParseQuery.getQuery(NCUP.class);
    query.equals("objectId");
    
    // query.whereLessThan("createdAt", date);
    
    query.findInBackground(new FindCallback<NCUP>() {
    
        @Override
        public void done(List<NCUP> ncupList, ParseException e) {
            if (e == null) {
                Log.d("QUERY", "Retrieved " + ncupList.size() + " data");
                Log.d("QUERY", ncupList.get(1).getCreatedAt().toString());
                for (NCUP ncup : ncupList) {
                    try {
                        ncup.delete();
                    } catch (ParseException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }
    
            } else {
                Log.d("QUERY", "Error: " + e.getMessage());
            }
        }
    
    });
    
  2. 使用我上面评论过的行来获取查询,即使用当前日期并添加到查询whereLessThan来获取和删除旧项目。但是这不起作用,将ncupList.size()返回为0.尝试了不同的格式但没有帮助。

  3. 删除整个NCUP类并创建一个新类。我尝试搜索这种方法,因为它似乎对我来说最快,但我认为我不能以编程方式进行。

  4. 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

问题可能是您正在使用ncup.delete(),它正在主线程上执行http请求。

替换为ncup.deleteInBackground(),您的用户界面不会阻止。

同时查看ParseObject.deleteAllInBackground(List<ParseObject> objects, DeleteCallback callback),它似乎可以满足您的需求(删除ParseObjects列表)