---
title: "移动应用中的 Web 服务错误处理"
date: "2019-07-10"
categories: 
  - "development"
  - "mobile-development"
  - "software"
tags: 
  - "error-handling"
  - "mobile-apps"
  - "web-services"
description: 本文探讨了使用MobileTogether在移动应用程序中实现有效的Web服务错误处理方法，详细介绍了管理HTTP错误以及提升用户体验的策略。
---
Status: #blog

Tags:  #error-handling #mobile-apps #web-services

Categories: [development](/blog/zh/category/development.md) | [mobile-development](/blog/zh/category/mobile-development.md) 
# 移动应用中的 Web 服务错误处理

智能手机将丰富的信息带到我们指尖，但即使是设计最好的手机应用程序，其功能也可能受到网络服务错误的影响，这些错误通常发生在与外部服务器进行通信时。在偏远地区，手机信号不稳定也可能导致应用程序在查找数据时性能下降。

Altova 公司的 MobileTogether 是一款 [低代码、跨平台的移动应用开发工具](https://www.altova.com/zh/mobiletogether)，它包含的功能可以帮助开发者在移动应用中优雅地处理 Web 服务错误，从而避免给最终用户带来意外的应用中断或难以理解的错误提示。

在之前的文章中，我们介绍了如何在 MapForce 数据映射中处理 HTTP 错误。现在，我们将以一个移动应用程序为例，探讨相同的 Web 服务，并描述如何在 MobileTogether 中处理错误。

![](/blog/images/cbcr_blog_1.jpg)

<!--more-->

在 MapForce 中，"AirportStatus" 示例数据映射功能以一个三字母的机场代码作为输入，并调用美国联邦航空管理局 (FAA) 提供的 Web 服务，该服务会返回一个 JSON 文件，其中包含机场的运行状态以及任何当前延误的描述。一个移动应用程序可以为用户提供一个下拉菜单，供用户选择机场，然后调用相同的 Web 服务，并将结果显示出来，就像在安卓手机上看到的一样

[![机场状态移动应用程序，运行在安卓手机上](/blog/images/screenshot-overview-517x1030.png)](screenshot-overview.png)

“机场状态”应用程序底部的按钮可以快速访问两个美国联邦航空管理局（FAA）的网页，这些网页提供了更多信息，但尚未针对移动设备进行优化。

我们使用 MobileTogether Designer 构建了这个移动应用程序，其中，Web 服务被添加为页面数据源，并通过 RESTful API 请求进行访问。MobileTogether API 请求对话框与 MapForce 中的对话框非常相似，它定义了机场代码的参数，以及一个用于 JSON 响应的头部字段：

[![MobileTogether RESTful API 请求对话框](/blog/images/rest-request-dialog.png)](rest-request-dialog.png)

该应用程序的工作流程非常简单：用户从下拉列表中选择一个机场，然后执行REST Get请求，并更新显示内容。这些操作由一个动作组完成，该动作组还包含了在移动应用程序中处理Web服务错误的机制

![移动应用中Web服务错误处理的定义
](/blog/images/action-group.png)

如果在应用程序运行过程中发生 HTTP 错误，我们将简单地显示一个消息框。开发者可以根据应用程序的具体需求，从以下三种选项中选择错误处理方式：

**中止脚本：** 当发生错误时，操作组中的所有后续操作都会被终止。这是发生错误时的默认行为。如果希望在发生错误后继续执行，可以选择“继续”或“抛出异常”选项。

**继续：** 操作不会被终止。相反，开发者可以定义两条不同的执行路径，并在没有错误时（成功时），或者在出现错误时（错误时），选择其中一条路径来执行。

**抛出异常：** 如果检测到错误，此选项会抛出一个异常，并将该异常存储在“尝试/捕获”动作的变量中。 “尝试/捕获”动作的“捕获”部分用于指定在发生错误时应执行的操作。 如果没有发生错误，则会处理下一个动作。 MobileTogether Designer 的在线帮助文档提供了关于“尝试/捕获”的详细描述。 我们也在[之前的博客文章](https://www.altova.com/blog/advanced-error-handling-actions-mobile-apps/)中介绍了“尝试/捕获”。

### 在应用程序中控制信息显示

该应用程序的界面显示由一系列表格构成，如图所示，这是“MobileTogether 页面设计”窗口的局部视图

![在 MobileTogether 页面设计窗口中，调整文本和控件的布局](/blog/images/display-definition.png)

图像的顶部是机场选择下拉框，该下拉框会根据用户的选择，定义需要执行的控制操作。这是触发操作组的条件。

[![在 MobileTogether 中，可以为控件添加操作](/blog/images/display-definition-2.png)](display-definition-2.png)

![用户从下拉列表中选择项目时执行的操作](/blog/images/execute-actions.png)

每个元素的可见性属性可以根据请求返回的数据来定制显示效果。

### 移动应用中Web服务错误处理的测试

我们在之前的文章中介绍了 MapForce 的错误处理机制，其中设置了一种备用的错误测试数据映射，允许我们显式地返回各种错误并检查结果。 事实证明，我们可以通过发送一个空字符串而不是有效的机场代码，来强制 FAA Web 服务返回错误。 在下拉框选项列表中，最后一个选项会发送一个空字符串，从而触发错误。 如图所示，在 iPhone 应用程序的横向模式下，就可以看到这种现象：

[![移动应用程序中的 Web 服务错误处理](/blog/images/forced-error-1030x476.png)](blob:https://www.altova.com/314bd398-fea4-458f-ab24-14156cfd341f)

用户可以点击“确定”按钮来关闭该消息，然后查看其他机场的状态

[![机场状态移动应用程序，如在iPhone上显示的界面](/blog/images/airport-delay-1-617x1030.png)](airport-delay-1.png)

如果您是 MobileTogether 的新用户，建议您先查看这些[其他示例和视频演示](https://www.altova.com/zh/mobiletogether/demos)，以便了解其基本功能。或者，您可以直接开始使用，通过下载[免费的 MobileTogether Designer](https://www.altova.com/zh/mobiletogether/download)，开始在移动应用中构建您自己的 Web 服务错误处理机制。
