解析 - 更新for循环中的大列表?

时间:2015-10-28 09:47:05

标签: android parse-platform

我尝试每次更新1000个项目,并在我的数据库中的特定列中显示一些值

ParseQuery<ParseObject> searchQuery = ParseQuery.getQuery("PhoneBook");
searchQuery.whereDoesNotExist("search");
searchQuery.setLimit(1000);
public void done(List<ParseObject> results, ParseException e) {
            if (e == null) {
                for(ParseObject contact:results){
                     contact.put("search","someNewValue");
                     contact.saveInBackground();
                }
                Toast.makeText(MainActivity.this, "done", Toast.LENGTH_SHORT).show();
            } else {

            }
        }
    });

实际上只有200-300更新,即使我运行1000项。 快速saveInBackground()有没有限制?

我应该使用saveEvantually()吗?

3 个答案:

答案 0 :(得分:1)

您应该将所有对象存储在List中,然后调用saveAllInBackground。试试这样:

        searchQuery.findInBackground(new FindCallback<ParseObject>() {

        @Override           
        public void done(List<ParseObject> results, ParseException e) {
                    if (e == null) {
                        ArrayList<ParseObject> phoneObjectList=new ArrayList<ParseObject>();

                        for(ParseObject contact:results){
                             contact.put("search","someNewValue");

                             phoneObjectList.add(contact);
                        }
                        ParseObject.saveAllInBackground(phoneObjectList, new SaveCallback() {

                            @Override
                            public void done(ParseException e) {
                                // TODO Auto-generated method stub
                                if(e==null){
                                    Log.d(TAG, "saved successfully");
                                    Toast.makeText(MainActivity.this, "done", Toast.LENGTH_SHORT).show();
                                }else{
                                    Log.d(TAG, "Error in saving view count :"+e.getMessage());
                                }
                            }
                        });


                    } else {

                    }
                }
            });

答案 1 :(得分:0)

我收到了来自解析的电子邮件:

  

您的应用...最近超出了您计划请求的75%   限制30个请求/秒。对Parse超出的额外请求   将丢弃30个请求/秒的速率,返回错误   错误代码155。

保存数据可能会超过超过30个请求/秒。

所以,应该考虑保存大量数据......

它的外观如下:

enter image description here

答案 2 :(得分:0)

去过那里,做到了。 saveAllInBackground()很糟糕。我不得不为普通saveInBackground()的每个对象使用循环而不回调。是的 - 从1000个200,300保存对象是正常的(对于该服务)。我认为它不适用于批量保存。是的 - 通过节省这么多,很容易超出限制。