解析 Android SDK 嵌套的 saveInBackground 不起作用

Posted

技术标签:

【中文标题】解析 Android SDK 嵌套的 saveInBackground 不起作用【英文标题】:Parse Android SDK nested saveInBackground not working 【发布时间】: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 中吗? 【参考方案1】:

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

【讨论】:

以上是关于解析 Android SDK 嵌套的 saveInBackground 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android无埋点数据收集SDK关键技术解析

解析嵌套查询 Android

在 Android 中解析嵌套的 JSON 对象

Unity3d Android SDK接入解析通用的Android SDK接入中间件

无法解析配置“:app:debugRuntimeClasspath”的所有文件。无法解析 com.moengage:moe-android-sdk:4.0.2

在Android中解析嵌套的JSONObject [重复]