我正在使用带有解析后端的现有Android应用程序(localDatastore已启用但未在此上下文中使用),它具有以下对象结构:
对象A具有对象B的数组
对象B具有对象C的数组
我使用saveInBackground在反向顺序(C,B,A)中调用完成SaveCallback中的下一个saveInBackground来保存这个对象结构。对于内部两个工作正常,但顶级对象不保存。这是代码(frame,newStep和order是继承自ParseObject类的类的对象)
frame.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.i("Info", "frame.save callback OK");
frames.add(frame);
newStep.setTimeFrames(frames);
newStep.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.i("Info", "newStep.save callback OK");
List<ProcessingStep> steps = order.getProcessingSteps();
steps.add(newStep);
order.setProcessingSteps(steps);
order.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null){
Log.i("Info", "order.save callback OK");
}else{
Log.i("Info", "order.save callback FAIL");
}
}});
} else {
Log.i("Info", "newStep.save callback FAIL");
e.printStackTrace();
}
}
});
} else {
Log.i("Info", "frame.save callback FAIL");
e.printStackTrace();
}
}
});
在控制台日志中我只看到“frame.save回调OK”,“newStep.saveInBackground()”似乎也被执行(对象出现在后端)但是我从来没有在回调中获得日志消息。
如果我在同步之前保存所有对象而没有先引用彼此,然后在这里调用代码,它似乎工作(至少工作一次)但是花了很长时间(分钟)。来自后端的查询速度非常快,框架对象也几乎立即保存,但完成回调似乎很烦人。当它失败时,我没有得到任何异常,记录它似乎无声地失败的任何东西。
我正在寻找任何洞察力为什么Parse表现得像以及如何解决它。
编辑:问题似乎是双重关系(A到B和B到C)。如果我只尝试A到B或B到C,那就可以了。然而,对我来说仍然是神秘的是为什么用回调分割操作似乎不起作用。
问题是启用了localdatastore。如果没有localdatastore,一切都可以正常工作。