我正在使用具有解析对象后端(已启用localDatastore但在此上下文中未使用)的现有Android App,该对象具有以下对象结构:
对象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回调正常”,“ newStep.saveInBackground()”似乎也已执行(对象出现在后端),但是在回调中我从未收到日志消息。
如果我先同步保存所有对象,而不先相互引用,然后在此处调用代码,它似乎可以工作(至少工作一次),但是却永远(几分钟)。来自后端的查询非常快,并且帧对象也几乎立即被保存,但是完成的回调似乎很麻烦。当它失败时,我没有收到任何异常,请记录似乎只是默默失败的所有内容。
我正在寻找任何理解为何Parse会如此表现以及如何解决它的见解。
编辑:问题似乎出在双重关系上(A到B以及B到C)。如果我只尝试A到B或B到C,则可以正常工作。但是,对我而言,仍然神秘的是为什么用回调将操作拆分似乎不起作用。
答案 0 :(得分:0)
问题是启用的本地数据存储。如果未启用localdatastore,则一切正常。