我只是在后台线程中关注:
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个条目......查看分析节目,我远远低于我的请求限制。还有其他限制吗? 也许是表创作的限制???
顺便说一句,下载表格数据总是有效...虽然看起来有点慢,但上传时不起作用,但这可能只是我的感觉......
答案 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以了解此方法的更多变体。