在 App Inventor 2 中使用 ResultNotifier.ShowProgressDialog 的正确方法?

Proper way of using ResultNotifier.ShowProgressDialog in App Inventor 2?

扩展正在开发的应用程序的功能,我需要向用户显示一个进度通知对话框。问题是,我无法正确完成它。此外,我无法正确关闭此通知程序。尝试过将时钟和变量设置为例如“5000ms”再到“0”,没有任何缺失。

我需要实现的功能是:

一个。检查标签 "storeparsedData" 是否在 TinyDB 中,是否填充了获取的 JSON 数据。我按照我的 .

中的@Taifun 建议完成了这项工作

b。如果标签不存在(空列表),执行 getWeb.gotText 块以获取 JSON 数据(这是通过过程 "getWebData" 完成的)。这个功能正确,但需要一段时间大约 1 '35'' 或更多,因此需要向用户显示一些内容。

c。从 Web 获取 JSON 数据时,需要向用户显示 "ShowProgressDialog" 通知程序,这样我才能应对智能手机看似冻结的情况。

d.如果标签 "storeparseData" 填充了获取的 JSON 数据,请关闭通知程序。

试过以下编码,没有成功:

有人可以帮我在这个应用程序中实现这个功能吗?一个块代码或一些可以遵循和学习的东西,会很棒。 预先感谢大家的回答。

[编辑 1]

根据@Taifun 的建议,相关功能似乎可以正常工作,但存在问题。"ShowProgressDialog" 块永远不会触发,无论是在设备上还是在伴侣上。此外,块 "DismissProgressDialog" 应该附加到哪里以在收到 JSON 数据后禁用通知程序?

这是审查过的块代码,用于检查TinyDB中存储的标签。 "ShowProgressDialog" 永远不会像它应该的那样开火。对这个问题有什么建议吗?

这是获取 JSON 数据的 getWeb 函数的块代码:

请大家指教,如果applicable.Thank请加块码

  1. 您的 progressNotifier.AfterChoosing 事件永远不会触发,因为该事件仅在从 Notifier.ShowChooseDialog 块中选择某些内容后触发,而不是 Notifier.ShowMessageDialog 块。因此,请改用 Notifier.ShowChooseDialog 块并将该块中的第二个按钮设置为空字符串。

  1. 您的 while 循环将冻结您的应用程序,正如您已经意识到的那样... 您根本不需要 Clock.Timer 事件 来检查是否你的数据在那里。

就像这样:在 Web.GotText 事件中收到您的数据并将数据存储在 TinyDB 中,然后关闭进度对话框并显示消息 "Database is ready" .

更新:不要在 for each in list 循环中将列表存储 n 次,而应在 for each in list 循环完成后仅存储一次。 .. DismissProgressDialogShowAlert 块相同...

该连接块的用途是什么?您可能想要删除它...