解析 - 上传数据有时需要永远,永远不会完成

时间:2014-11-21 00:01:50

标签: android parse-platform

我只是在后台线程中关注:

for (int i = 0; i < 15; i++) /* yes, my table is that small */
{
     ParseObject po = new ParseObject(table);
     // writing some data to the object
     // checking some defined interfaces and write data to the ParseObject...
     // here's some example code...
     if (dao instanceof IDaoNameable)
     {
        changed |= setAndCheck(po, colNameGerman, ((IDaoNameable) dao).getNameGerman());
        changed |= setAndCheck(po, colNameEnglish, ((IDaoNameable) dao).getNameEnglish());
     }
     // ...
     po.save();
}

private static boolean setAndCheck(final ParseObject po, String field, Object data)
{
    Object old = po.get(field);
    if (old != null && old.equals(data))
        return false;
    else
        po.put(field, data);
    return true;
}

该表尚不存在。它将自动创建。

我观察到,今天和昨天一切正常,但是像现在一样在晚上尝试它并不起作用。我说的是,通常上传需要几秒钟,而现在却没有在15分钟内结束。 save永远不会回来......我不知道为什么......

我创建了一个解析应用程序并且只为自己使用它,使用一些大小&lt;的数据表进行测试。 100个条目......查看分析节目,我远远低于我的请求限制。还有其他限制吗? 也许是表创作的限制???

顺便说一句,下载表格数据总是有效...虽然看起来有点慢,但上传时不起作用,但这可能只是我的感觉......

2 个答案:

答案 0 :(得分:0)

&#34; po.save()&#34;在一个循环中不太可能没有表现。

你想以某种方式让许多线程在解析API上进行API调用,而不会相互阻塞。您当前的代码可能在一个单独的线程上,其中连续调用&#39; save&#39;被阻止等待之前的通话完成。

请参阅'bolt&#39;上的文档。 (看看那里的循环)并尝试让你的android SDK代码执行包含解析的并行任务&#34; saveInBackgroud()&#34;应该能够分派多个并发保存任务。

如果你真的需要大集合的良好性能和在循环中调用save,你可以考虑一个完整的REST API,如:

多线程client,其中每个连接到&#34; parse.com&#34;来自您配置大小的池

OR

使用像'retrofit'

这样的库

答案 1 :(得分:0)

我同意Robert Rowntree的说法,循环中的save()是一种不好的做法。你可以做的是创建一个ArrayList<ParseObject>并在你的循环中填写

List<ParseObject> objectsToSave = new ArrayList<ParseObject>();
for (int i = 0; i < 15; i++) /* yes, my table is that small */
{
     ParseObject po = new ParseObject(table);
     // writing some data to the object
     // checking some defined interfaces and write data to the ParseObject...
     // here's some example code...
     if (dao instanceof IDaoNameable)
     {
        changed |= setAndCheck(po, colNameGerman, ((IDaoNameable) dao).getNameGerman());
        changed |= setAndCheck(po, colNameEnglish, ((IDaoNameable) dao).getNameEnglish());
     }
     // ...
     objectsToSave.add(po);

}
ParseObject.saveAllInBackground(objectsToSave, saveCallback);

检查docs以了解此方法的更多变体。