解析Android SDK嵌套的saveInBackground不工作
我正在开发一个现有的Android应用程序,该应用程序具有parse后端(localDatastore已启用,但在此上下文中未使用),该应用程序具有以下对象结构: 对象A具有对象B的数组 对象B具有对象C的数组 我使用saveInBackground保存这个对象结构,在调用done SaveCallback中的下一个saveInBackground时使用相反顺序(C、B、A)。对于内部两个,这两个选项工作正常,但顶层对象不保存。 下面是代码(frame、newStep和order是从ParseObject类继承的类的对象)解析Android SDK嵌套的saveInBackground不工作,android,parsing,callback,Android,Parsing,Callback,我正在开发一个现有的Android应用程序,该应用程序具有parse后端(localDatastore已启用,但在此上下文中未使用),该应用程序具有以下对象结构: 对象A具有对象B的数组 对象B具有对象C的数组 我使用saveInBackground保存这个对象结构,在调用done SaveCallback中的下一个saveInBackground时使用相反顺序(C、B、A)。对于内部两个,这两个选项工作正常,但顶层对象不保存。 下面是代码(frame、newStep和order是从ParseO
frame.saveInBackground(新的SaveCallback(){
@凌驾
公共作废完成(Parsee异常){
如果(e==null){
Log.i(“Info”,“frame.save回调确定”);
框架。添加(框架);
newStep.setTimeFrames(帧);
newStep.saveInBackground(新的SaveCallback(){
@凌驾
公共作废完成(Parsee异常){
如果(e==null){
Log.i(“Info”、“newStep.save回调确定”);
List steps=order.getProcessingSteps();
步骤。添加(新闻步骤);
订单。设置处理步骤(步骤);
order.saveInBackground(新的SaveCallback(){
@凌驾
公共作废完成(Parsee异常){
如果(e==null){
Log.i(“Info”,“order.save回调确定”);
}否则{
Log.i(“Info”、“order.save回调失败”);
}
}});
}否则{
Log.i(“Info”、“newStep.save回调失败”);
e、 printStackTrace();
}
}
});
}否则{
Log.i(“Info”,“frame.save回调失败”);
e、 printStackTrace();
}
}
});
在控制台日志中,我只看到“frame.save callback OK”,似乎也执行了“newStep.saveInBackground()”(对象出现在后端),但我从未在回调中获得日志消息
如果我先同步保存所有对象而不相互引用,然后在这里调用代码,它似乎可以工作(至少工作过一次),但需要花费很多时间(分钟)。来自后端的查询速度非常快,帧对象也几乎立即保存,但完成的回调似乎有问题。当它失败时,我没有得到任何异常,记录任何它似乎只是默默失败的事情
我正在寻找解析为何会这样以及如何修复它的任何见解
编辑:问题似乎在于双重关系(A到B和B到C)。如果我只尝试A到B或B到C,效果很好。然而,对我来说仍然很神秘的是,为什么用回调来拆分操作似乎不起作用 问题在于启用的本地数据存储。如果未启用localdatastore,则一切正常 问题在于启用的本地数据存储。如果未启用localdatastore,则一切正常 存储newStep对象似乎有问题,因为您没有看到“newStep.save callback OK”日志。你能发布你的NewStep类代码吗?你能检查你的解析服务器日志吗?解析服务器日志是干净的。newStep对象的类只是扩展了ParseObject实现的Parcelable(只有一堆getter和setter),它的属性是什么?有什么特别之处吗?最值得注意的是指向最低对象(上面代码段中的帧)的指针数组。您确定在存储newStep之前,TimeFrame数组中的所有帧都存储在Parse中吗?存储newStep对象似乎有问题,因为您没有看到“newStep.save callback OK”日志。你能发布你的NewStep类代码吗?你能检查你的解析服务器日志吗?解析服务器日志是干净的。newStep对象的类只是扩展了ParseObject实现的Parcelable(只有一堆getter和setter),它的属性是什么?有什么特别之处吗?最值得注意的是指向最低对象(上面代码段中的帧)的指针数组。您确定在存储newStep之前,TimeFrame数组中的所有帧都存储在Parse中吗?
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();
}
}
});