gpt4 book ai didi

android - parse.com 数据存储未固定多个未保存的对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:38 24 4
gpt4 key购买 nike

在没有任何互联网连接的任务中,我正在创建一个 ParseObject 并引用另一个 ParseObject 和其中的当前用户。然后我将它固定到本地数据存储,以便稍后保存(这些类和数据存储已正确初始化)。

    final Rating rating = new Rating(substationObjectId, data);

// inside constructor
put(KEY_OTHER_OBJECT, OtherObject.createWithoutData(OtherObject.class, substationObjectId));
put(KEY_USER, ParseUser.getCurrentUser());

rating.pin("unsent");

我通过一个快速查询来跟进,以从该图钉中获取所有评级。

final ParseQuery<Rating> queryUnsent = ParseQuery.getQuery(Rating.class);
queryUnsent.whereEqualTo(Rating.KEY_USER, ParseUser.getCurrentUser());
queryUnsent.fromPin("unsent");
final List<Rating> unsentRatings = queryUnsent.find();

Logger.d(LOG_TAG, "queryUnsent count = %d", unsentRatings.size());
for (Rating unsentRating: unsentRatings) {
Logger.d(LOG_TAG, "\tdatastore for %s with objectId='%s'", unsentRating().getName(), unsentRating.getObjectId());
}

问题:似乎只有一个评级被固定。不存储第二个评级,即使解析报告成功。

“Albury”评级的第一次固定(null objectId 是正常且预期的)在随后针对该固定的 get-all 查询中产生这些:

queryUnsent count = 1
datastore for Albury with objectId='null'

“Arapuni”的第二个:

queryUnsent count = 1
datastore for Albany with objectId='null'

其他的尝试:

  • pinEventually("未发送")
  • 没有标签的pin()
  • 之后立即保存()并丢弃连接异常
  • 从所有地方删除 user=current user 子句
  • 对整个数据存储的一般查询确认根本没有存储额外的对象

上线并保存评级(为其提供 objectId)后,新的离线评级将被正确固定,但问题随后会在第二个离线评级时重复出现。

我感觉这是 parse.com 的 Android SDK 库的错误。数据存储似乎对 objectId 实现了唯一约束,但未保存的对象还没有 objectId。

有没有其他人遇到过这个问题,或者可以提出解决方法?

最佳答案

这真的很奇怪。

正如我在评论中所写,我的问题主要涉及取消固定未保存的对象,因此我开始创建一个项目,该项目类似于我的应用程序中的某些行为,并提供可重现的问题演示。

Android Studio 项目可以在这里找到:https://www.dropbox.com/sh/6whcw0qa1wdmnl2/AAAeELECIxgDjfa5ICULn2Zya?dl=0

关于项目

我一直试图实现的想法是将一个任务 (ParseObject) 与一个日志条目(另一个 ParseObject)和一个名为 TaskSummaryHolder 的对象中的 JSONArray 联系在一起。

将这 3 个实体在本地绑定(bind)在一起,我可以将大量信息推送到 JSONArray 中,并且只定期将信息从 JSONArray 推送到日志条目。

将所有内容绑定(bind)在一起的摘要对象永远不会在线存储。

该方案应该可以应用于一系列不同的任务,以便一个 TaskSummaryHolder 实例可以存储一段时间内发生的事件,而另一个实例则保持例如GPS条目。

目前我有一些类似于实时应用程序中项目中显示的内容,但由于取消固定问题,我目前正在清除摘要而不是取消固定(删除列和固定)。

问题 1 取消固定

我的第一个观察是

ParseObject.unpinAllInBackground(TaskSummaryHolder.PIN)

并不总是有效,而

ParseObject.unpinAllInBackground(TaskSummaryHolder.PIN, summaries)

看起来更可靠。如果目标是从数据存储中清除一个 pin,如果在取消固定之前必须查询,那就有点奇怪了。

问题2固定

令我惊讶的是,我遇到的正是您所描述的问题。在测试项目中,我在线获取了两个任务,并为每个任务添加了一个 TaskSummaryHolder 实例。只有第一个实例固定在本地。

受您对问题描述的启发,我尝试让它固定然后保存(参见 TaskSummaryHolder 第 114 行)。

在此之后它起作用了,并且从那时起就无法重现该问题。即使在卸载和/或重启手机后,固定和取消固定的行为也符合预期。

如果您尝试运行该项目并查看其行为方式,这可能会很有趣。

关于android - parse.com 数据存储未固定多个未保存的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com