【问题标题】:Parse Android SDK nested saveInBackground not working解析 Android SDK 嵌套的 saveInBackground 不起作用
【发布时间】:2019-03-12 15:43:02
【问题描述】:

我正在开发一个现有的带有解析后端的 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 callback OK”,“newStep.saveInBackground()”似乎也被执行了(对象出现在后端)但是我从来没有在回调中收到日志消息。

如果我先同步保存所有对象而不先相互引用,然后在此处调用代码,它似乎可以工作(至少工作一次)但需要永远(几分钟)。来自后端的查询非常快,框架对象也几乎立即保存,但完成回调似乎有问题。当它失败时,我没有得到任何异常,记录任何它似乎静默失败的东西。

我正在寻找 Parse 为何会出现这种行为以及如何修复它的任何见解。

编辑: 问题似乎与双重关系(A 到 B 和 B 到 C)有关。如果我只尝试使用 A 到 B 或 B 到 C,它工作得很好。然而,对我来说仍然很神秘的是,为什么用回调拆分操作似乎不起作用。

【问题讨论】:

  • 存储 newStep 对象似乎存在问题,因为您没有看到“newStep.save callback OK”日志。您可以发布您的 NewStep 课程代码吗?你能检查你的 Parse 服务器日志吗?
  • 解析服务器日志是干净的。 newStep 对象的类只是扩展 ParseObject 实现 Parcelable(只有一堆 getter 和 setter)
  • 它的属性是什么?有什么特别之处吗?
  • 最值得注意的是一个指向最低对象的指针数组(上面代码sn-p中的帧)。
  • 你确定 timeFrames 数组中的所有帧在存储 newStep 之前都存储在 Parse 中吗?

标签: android parsing callback


【解决方案1】:

问题在于启用的本地数据存储。如果没有启用 localdatastore,一切都会正常运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2019-05-17
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多