移动应用程序的高级错误处理机制

MobileTogether 2.1 包含了新的“尝试/抛出”和“捕获”错误处理功能,适用于移动应用程序,允许开发者构建复杂的错误处理机制,从而提升用户体验。例如,如果一个应用程序想要连接到第三方Web服务,但服务器不可用,那么这些错误处理功能可以实现平滑的恢复。

MobileTogether的错误处理机制在移动应用中,对于所有平台都采用相同的方式,这可以节省开发者的时间,因为无需根据每个移动操作系统的具体要求进行定制。

我们在之前的文章《REST服务作为移动应用的的数据源》中,使用了一个演示应用,该应用调用由美国地质调查局(USGS)托管的REST服务,以获取地理坐标的精确海拔高度值。

我们可以使用 Try/Catch 机制来处理在调用 REST 服务时可能出现的两种不同的错误

  • 我们可能会遇到与美国地质调查局(USGS)服务器的连接错误
  • 我们可能会收到一个海拔值为 -1000000 的结果,这意味着美国地质调查局(USGS)正在告知我们,对于您提供的坐标,它没有相关的海拔数据

我们可以将整个 REST 服务调用以及后续的数据操作都放在 Try 语句块中,就像这里所示:

如果连接到 Web 服务失败,则“Try”操作内部的所有后续操作都会被中止。如果从美国地质调查局(USGS)没有获取到任何数据,那么尝试执行上述“更新节点(们)”操作就没有意义。在这个例子中,只会中止一个操作,但您可以在“Try”操作内部放置多个操作、操作组,甚至可以放置调用其他操作组的操作组。

同样,"Catch" 动作也可以执行多个操作,这些操作仅在发生错误时才会执行。在上面的截图所示,"Catch" 动作会显示一个消息框,提示连接失败,并且会使用与 USGS 在超出范围错误时提供的相同海拔值来更新节点。当然,您可以在 "Catch" 动作中放置多个动作、动作组,甚至可以放置调用其他动作组的动作组,就像 "Try" 动作一样。

针对移动应用程序,提供更复杂的流程控制功能,并包含错误处理机制

当移动应用程序需要更复杂的程序逻辑时,try/catch/throw 错误处理机制的真正优势才能发挥出来。

考虑一种情况,其中一个操作组包含一系列操作——例如数据库命令或Web服务调用——这些操作需要按顺序执行,并且每个调用的成功都依赖于前一个调用的结果。如果使用if-else语句来检查每个步骤的结果,代码会变得非常繁琐。 更好的方法是,可以清晰且优雅地定义数据库操作,使其在出现错误时抛出异常,然后在代码的底部设置一个统一的异常捕获块,用于显示错误信息。

这张截图展示了在移动应用程序中如何使用 try/catch 机制。该应用程序允许用户自动从美国证券交易委员会 (SEC) 的 EDGAR 数据库中提取美国上市公司的高层财务报告,并进行探索和分析

如果这五个数据库查询中的任何一个失败,将会抛出一个错误,并且在 "Try" 块中剩余的所有操作将被跳过。同时,一个变量会记录下错误信息,指出是哪个查询失败了。

嵌套的 try-catch 错误处理

您甚至可以在一个动作组中定义一个 try/catch 错误处理程序,然后让错误发生在另一个独立的子动作组中,该子动作组由主动作调用。实际上,这种嵌套可以非常深入,错误可能发生在嵌套了多次的某个动作中。

此时,控制权直接返回到外部错误处理器的“catch”分支,在那里对错误进行处理,这与在其他编程语言中 try/catch/throw 的工作方式完全相同。

MobileTogether Designer 是一款用于移动应用程序的开发工具,它提供 try/catch/throw 错误处理功能,并且是免费的——立即下载您的副本