Xamarin.Forms Web 服务简介

Download Sample下载示例

本主题提供了 Xamarin.Forms 示例应用程序的演练,演示了如何与各种 Web 服务进行通信。 虽然每个 Web 服务都使用单独的示例应用程序,但它们在功能上相似,并共享公共类。

下面介绍的示例待办事项列表应用程序用于演示如何使用 Xamarin.Forms 访问不同类型的 Web 服务后端。 其提供的功能如下:

  • 查看任务列表。
  • 添加、编辑和删除任务。
  • 将任务的状态设置为“完成”。
  • 朗读任务的名称和备注字段。

在所有情况下,任务都存储在通过 Web 服务访问的后端中。

启动应用程序后,将显示一个页面,其中列出从 Web 服务检索到的任何任务,并允许用户创建新的任务。 单击某个任务会将应用程序导航到第二个页面,可在其中编辑、保存、删除和朗读任务。 最终的应用程序如下所示:

Todo application - first pageTodo application - second page

本指南中的每个主题都提供了指向应用程序不同版本的下载链接,该应用程序用于演示特定类型的 Web 服务后端。 在与每个 Web 服务样式相关的页面上下载相关示例代码。

了解应用程序剖析

每个示例应用程序的共享代码项目都由三个主要文件夹组成:

Folder 目的
数据 包含用于管理数据项并与 Web 服务通信的类和接口。 至少,这包括 TodoItemManager 类,该类通过 App 类中的属性进行公开以调用 Web 服务操作。
模型 包含应用程序的数据模型类。 至少,这包括 TodoItem 类,该类对应用程序使用的单个数据项进行建模。 该文件夹还可以包含用于为用户数据建模的任何其他类。
视图 包含应用程序的页面。 这通常包含 TodoListPageTodoItemPage 类,以及用于身份验证目的的任何其他类。

每个应用程序的共享代码项目还包含许多重要文件:

文件 目的
Constants.cs Constants 类,用于指定应用程序与 Web 服务通信所使用的任何常数。 这些常数需要更新才能访问在提供程序上创建的个人后端服务。
ITextToSpeech.cs ITextToSpeech 接口,该接口指定 Speak 方法必须由任何实现类提供。
Todo.cs App 类和 TodoItemManager 类,前者负责实例化应用程序将在每个平台上显示的第一页,后者用于调用 Web 服务操作。

查看页面

大多数示例应用程序至少包含两个页面:

  • TodoListPage – 此页面显示 TodoItem 实例的列表,TodoItem.Done 属性为 true 时还显示一个对勾图标。 单击某个项可导航到 TodoItemPage。 此外,可以通过单击 + 符号创建新项。
  • TodoItemPage – 此页面显示所选 TodoItem 的详细信息,并允许编辑、保存、删除和朗读它。

此外,某些示例应用程序还包含用于管理用户身份验证过程的其他页面。

数据建模

每个示例应用程序都使用 TodoItem 类为显示并发送至 Web 服务进行存储的数据建模。 以下代码示例演示 TodoItem 类:

public class TodoItem
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string Notes { get; set; }
    public bool Done { get; set; }
}

ID 属性用于唯一标识每个 TodoItem 实例,每个 Web 服务都使用它来标识要更新或要删除的数据。

调用 Web 服务操作

Web 服务操作通过 TodoItemManager 类进行访问,可以通过 App.TodoManager 属性访问该类的实例。 TodoItemManager 类提供以下方法来调用 Web 服务操作:

  • GetTasksAsync – 此方法用于使用从 Web 服务检索到的 TodoItem 实例填充 TodoListPage 上的 ListView 控件。
  • SaveTaskAsync – 此方法用于在 Web 服务上创建或更新 TodoItem 实例。
  • DeleteTaskAsync – 此方法用于删除 Web 服务上的 TodoItem 实例。

此外,某些示例应用程序还在 TodoItemManager 类中包含其他方法,这些方法用于管理用户身份验证过程。

TodoItemManager 方法不直接调用 Web 服务操作,而是在注入 TodoItemManager 构造函数的依赖类上调用方法。 例如,一个示例应用程序将 RestService 类注入 TodoItemManager 构造函数,以提供使用 REST API 访问数据的实现。