解析Android SDK嵌套的saveInBackground不工作

解析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

我正在开发一个现有的Android应用程序,该应用程序具有parse后端(localDatastore已启用,但在此上下文中未使用),该应用程序具有以下对象结构:

对象A具有对象B的数组

对象B具有对象C的数组

我使用saveInBackground保存这个对象结构,在调用done SaveCallback中的下一个saveInBackground时使用相反顺序(C、B、A)。对于内部两个,这两个选项工作正常,但顶层对象不保存。 下面是代码(frame、newStep和order是从ParseObject类继承的类的对象)

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();
            }
        }
    });