解析Android SDK嵌套的saveInBackground无法正常工作

时间:2019-03-12 15:43:03

标签: android parsing callback

我正在使用具有解析对象后端(已启用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,则可以正常工作。但是,对我而言,仍然神秘的是为什么用回调将操作拆分似乎不起作用。

1 个答案:

答案 0 :(得分:0)

问题是启用的本地数据存储。如果未启用localdatastore,则一切正常。