解析 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Unity3d Android SDK接入解析通用的Android SDK接入中间件
无法解析配置“:app:debugRuntimeClasspath”的所有文件。无法解析 com.moengage:moe-android-sdk:4.0.2