移动应用中的 Web 服务错误处理

智能手机将丰富的信息带到我们指尖,但即使是设计最好的手机应用程序,其功能也可能受到网络服务错误的影响,这些错误通常发生在与外部服务器进行通信时。在偏远地区,手机信号不稳定也可能导致应用程序在查找数据时性能下降。

Altova 公司的 MobileTogether 是一款 低代码、跨平台的移动应用开发工具,它包含的功能可以帮助开发者在移动应用中优雅地处理 Web 服务错误,从而避免给最终用户带来意外的应用中断或难以理解的错误提示。

在之前的文章中,我们介绍了如何在 MapForce 数据映射中处理 HTTP 错误。现在,我们将以一个移动应用程序为例,探讨相同的 Web 服务,并描述如何在 MobileTogether 中处理错误。

在 MapForce 中,"AirportStatus" 示例数据映射功能以一个三字母的机场代码作为输入,并调用美国联邦航空管理局 (FAA) 提供的 Web 服务,该服务会返回一个 JSON 文件,其中包含机场的运行状态以及任何当前延误的描述。一个移动应用程序可以为用户提供一个下拉菜单,供用户选择机场,然后调用相同的 Web 服务,并将结果显示出来,就像在安卓手机上看到的一样

“机场状态”应用程序底部的按钮可以快速访问两个美国联邦航空管理局(FAA)的网页,这些网页提供了更多信息,但尚未针对移动设备进行优化。

我们使用 MobileTogether Designer 构建了这个移动应用程序,其中,Web 服务被添加为页面数据源,并通过 RESTful API 请求进行访问。MobileTogether API 请求对话框与 MapForce 中的对话框非常相似,它定义了机场代码的参数,以及一个用于 JSON 响应的头部字段:

该应用程序的工作流程非常简单:用户从下拉列表中选择一个机场,然后执行REST Get请求,并更新显示内容。这些操作由一个动作组完成,该动作组还包含了在移动应用程序中处理Web服务错误的机制

如果在应用程序运行过程中发生 HTTP 错误,我们将简单地显示一个消息框。开发者可以根据应用程序的具体需求,从以下三种选项中选择错误处理方式:

中止脚本: 当发生错误时,操作组中的所有后续操作都会被终止。这是发生错误时的默认行为。如果希望在发生错误后继续执行,可以选择“继续”或“抛出异常”选项。

继续: 操作不会被终止。相反,开发者可以定义两条不同的执行路径,并在没有错误时(成功时),或者在出现错误时(错误时),选择其中一条路径来执行。

抛出异常: 如果检测到错误,此选项会抛出一个异常,并将该异常存储在“尝试/捕获”动作的变量中。 “尝试/捕获”动作的“捕获”部分用于指定在发生错误时应执行的操作。 如果没有发生错误,则会处理下一个动作。 MobileTogether Designer 的在线帮助文档提供了关于“尝试/捕获”的详细描述。 我们也在之前的博客文章中介绍了“尝试/捕获”。

在应用程序中控制信息显示

该应用程序的界面显示由一系列表格构成,如图所示,这是“MobileTogether 页面设计”窗口的局部视图

图像的顶部是机场选择下拉框,该下拉框会根据用户的选择,定义需要执行的控制操作。这是触发操作组的条件。

每个元素的可见性属性可以根据请求返回的数据来定制显示效果。

移动应用中Web服务错误处理的测试

我们在之前的文章中介绍了 MapForce 的错误处理机制,其中设置了一种备用的错误测试数据映射,允许我们显式地返回各种错误并检查结果。 事实证明,我们可以通过发送一个空字符串而不是有效的机场代码,来强制 FAA Web 服务返回错误。 在下拉框选项列表中,最后一个选项会发送一个空字符串,从而触发错误。 如图所示,在 iPhone 应用程序的横向模式下,就可以看到这种现象:

用户可以点击“确定”按钮来关闭该消息,然后查看其他机场的状态

如果您是 MobileTogether 的新用户,建议您先查看这些其他示例和视频演示,以便了解其基本功能。或者,您可以直接开始使用,通过下载免费的 MobileTogether Designer,开始在移动应用中构建您自己的 Web 服务错误处理机制。