---
title: "移动应用程序的高级错误处理机制"
date: "2016-05-03"
categories: 
  - "development"
  - "mobile"
  - "software"
tags: 
  - "error-handling"
  - "mobile-development"
  - "mobiletogether"
description: MobileTogether 2.1 引入了针对移动应用程序的先进的“尝试/抛出”和“捕获”错误处理功能，使开发者能够有效地跨平台管理错误。
---
Status: #blog

Tags:  #error-handling #mobile-development #mobiletogether

Categories: [development](/blog/zh/category/development.md) | [mobile-development](/blog/zh/category/mobile-development.md) 
# 移动应用程序的高级错误处理机制

MobileTogether 2.1 包含了新的“尝试/抛出”和“捕获”错误处理功能，适用于移动应用程序，允许开发者构建复杂的错误处理机制，从而提升用户体验。例如，如果一个应用程序想要连接到第三方Web服务，但服务器不可用，那么这些错误处理功能可以实现平滑的恢复。

MobileTogether的错误处理机制在移动应用中，对于所有平台都采用相同的方式，这可以节省开发者的时间，因为无需根据每个移动操作系统的具体要求进行定制。

![错误处理5](/blog/images/error_handling5.png)

<!--more-->

我们在之前的文章《[REST服务作为移动应用的的数据源](https://www.altova.com/blog/rest-services-as-data-sources-for-mobile-apps/)》中，使用了一个演示应用，该应用调用由美国地质调查局（USGS）托管的REST服务，以获取地理坐标的精确海拔高度值。

我们可以使用 Try/Catch 机制来处理在调用 REST 服务时可能出现的两种不同的错误

- 我们可能会遇到与美国地质调查局（USGS）服务器的连接错误
- 我们可能会收到一个海拔值为 -1000000 的结果，这意味着美国地质调查局（USGS）正在告知我们，对于您提供的坐标，它没有相关的海拔数据

我们可以将整个 REST 服务调用以及后续的数据操作都放在 `Try` 语句块中，就像这里所示：

![移动应用程序中，在错误处理操作中，可能需要使用更复杂的 try-catch 结构](/blog/images/more-complicated-try-catch.png)

如果连接到 Web 服务失败，则“Try”操作内部的所有后续操作都会被中止。如果从美国地质调查局（USGS）没有获取到任何数据，那么尝试执行上述“更新节点(们)”操作就没有意义。在这个例子中，只会中止一个操作，但您可以在“Try”操作内部放置多个操作、操作组，甚至可以放置调用其他操作组的操作组。

同样，"Catch" 动作也可以执行多个操作，这些操作仅在发生错误时才会执行。在上面的截图所示，"Catch" 动作会显示一个消息框，提示连接失败，并且会使用与 USGS 在超出范围错误时提供的相同海拔值来更新节点。当然，您可以在 "Catch" 动作中放置多个动作、动作组，甚至可以放置调用其他动作组的动作组，就像 "Try" 动作一样。

### 针对移动应用程序，提供更复杂的流程控制功能，并包含错误处理机制

当移动应用程序需要更复杂的程序逻辑时，`try/catch/throw` 错误处理机制的真正优势才能发挥出来。

考虑一种情况，其中一个操作组包含一系列操作——例如数据库命令或Web服务调用——这些操作需要按顺序执行，并且每个调用的成功都依赖于前一个调用的结果。如果使用if-else语句来检查每个步骤的结果，代码会变得非常繁琐。 更好的方法是，可以清晰且优雅地定义数据库操作，使其在出现错误时抛出异常，然后在代码的底部设置一个统一的异常捕获块，用于显示错误信息。

这张截图展示了在移动应用程序中如何使用 try/catch 机制。该应用程序允许用户自动从美国证券交易委员会 (SEC) 的 EDGAR 数据库中提取美国上市公司的高层财务报告，并进行探索和分析

![DB系列 - 尝试-捕获 (try-catch) 机制](/blog/images/DB-series-try-catch.png)

如果这五个数据库查询中的任何一个失败，将会抛出一个错误，并且在 "Try" 块中剩余的所有操作将被跳过。同时，一个变量会记录下错误信息，指出是哪个查询失败了。

**嵌套的 try-catch 错误处理**

您甚至可以在一个动作组中定义一个 try/catch 错误处理程序，然后让错误发生在另一个独立的子动作组中，该子动作组由主动作调用。实际上，这种嵌套可以非常深入，错误可能发生在嵌套了多次的某个动作中。

此时，控制权直接返回到外部错误处理器的“catch”分支，在那里对错误进行处理，这与在其他编程语言中 try/catch/throw 的工作方式完全相同。

MobileTogether Designer 是一款用于移动应用程序的开发工具，它提供 try/catch/throw 错误处理功能，并且是免费的——[立即下载您的副本](https://www.altova.com/zh/download/mobiletogether.html)
