parse.com数据存储不locking多个未保存的对象

在一个任务,没有任何互联网连接,我创build一个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()); } 

问题:只有一个评级似乎是固定的。 即使parsing报告成功,第二个评级也不存储。

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

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

第二个'Arapuni':

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

其他事情尝试:

  • pinEventually( “未发送”)
  • pin()没有标签
  • 之后立即保存(),并丢弃连接exception
  • 从任何地方删除用户=当前用户条款
  • 针对整个数据存储区的一般查询确认其他对象根本不存储

上线后保存评级(这给它一个objectId),一个新的离线评级将被正确固定,但问题然后重复自己与第二个离线评级。

我感觉这是一个parse.com的Android SDK库的错误。 看起来好像数据存储对objectId执行唯一的约束,但未保存的对象还没有objectId。

有其他人遇到这个问题,或者可以build议一个工作?

Solutions Collecting From Web of "parse.com数据存储不locking多个未保存的对象"

这确实很奇怪。

正如我在评论中写到的,我的问题主要涉及获取未保存的对象,所以我开始创build一个项目,类似于我的应用程序中的一些行为,并重现了问题的演示。

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

关于该项目

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

让这3个实体在本地连接在一起,我可以将大量信息推送到JSONArray中,并且只是周期性地将JSONArray中的信息推送到日志条目中。

将它们结合在一起的摘要对象绝不意味着在线存储。

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

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

问题1取消固定

我的第一个观察是

 ParseObject.unpinAllInBackground(TaskSummaryHolder.PIN) 

并不总是工作,而

 ParseObject.unpinAllInBackground(TaskSummaryHolder.PIN, summaries) 

看起来更可靠。 有点奇怪,如果一个人必须查询之前unpinning如果目标是清除一个引脚从数据存储。

问题2固定

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

受你问题描述的启发,我尝试让它钉住然后保存(参见TaskSummaryHolder第114行)。

在此之后,它一直无法从病房再现问题。 即使在卸载和/或重新启动手机之后,locking和解除locking的行为都与预期相同。

如果您尝试运行该项目并查看它的行为,可能会很有趣。