Codenameone executeOfflineCommand在Android上从存储执行时跳过命令

Codenameone executeOfflineCommand在Android上从存储执行时跳过命令,codenameone,Codenameone,我必须在程序中按顺序执行“Start”和“Finish”命令,并在最后同步所有内容。所以我先按顺序插入脱机命令,并假设它们将按相同的顺序执行。我用“列表”和“迭代器”来表示 问题是:完成命令将在中间的一些奇怪场景中被错过执行,并且“开始”命令将彼此执行并发送所有错误数据并以错误的方式映射。p> 由于在服务器上执行命令时操作将获得ID,因此我保留临时ID以映射存储中的脱机命令(localID)。如果我使用其他收藏,这会变得更好吗?很难在模拟器上重现这一点。请回顾这两种情况,并建议这种方法哪里会出错

我必须在程序中按顺序执行“Start”和“Finish”命令,并在最后同步所有内容。所以我先按顺序插入脱机命令,并假设它们将按相同的顺序执行。我用“列表”和“迭代器”来表示

问题是:完成命令将在中间的一些奇怪场景中被错过执行,并且“开始”命令将彼此执行并发送所有错误数据并以错误的方式映射。p> 由于在服务器上执行命令时操作将获得ID,因此我保留临时ID以映射存储中的脱机命令(localID)。如果我使用其他收藏,这会变得更好吗?很难在模拟器上重现这一点。请回顾这两种情况,并建议这种方法哪里会出错。谢谢

我将把脱机命令添加到列表中并保存到存储器中。之后,用户可以在应用程序中执行删除操作,以便我检索列表并从存储中删除已删除的命令,因此现在我已筛选列表。

不同步

这几乎总是代号一的错误。您的代码处理UI,因此它应该在EDT上,并且
Display.getInstance().isEDT()
应该为true

我猜中间的命令之一使用下面的代码<代码>调用和()/<代码>派生:

  • addToQueueAndWait
  • 模态对话框
这将触发第二轮同步运行

您可以通过重现问题并检查列表中的哪个命令每次都在那里来跟踪它。然后修复该命令,使其不会以这种方式阻塞


另一种解决方法是在开始处理时立即删除列表,这将防止重复执行命令。

Shai..我有点困惑。你能提供更多的细节吗。我正在使用AddToQueueAnd等待我的每个查询来检索结果。请参考票据中附加的代码。第二种方法可以给出一个示例,您的意思是在处理后或之前删除列表。如果我以前做过,我如何访问元素。请告知。我正在使用NetworkManager.getInstance().addToQueueAndWait(r);对于我在应用程序中进行的每个查询。如果storage.getInstance().deleteStorageFile(“list2”);请告知。@Shai..我必须用addToQueue(r)替换addToQueue和Wait(r)吗?我依赖第一个动作和第二个动作。我需要在第二个动作开始前完成第一个动作。这主要发生在android设备上。请告知。