java - 需要实现 Virgil Dobjanschi REST 实现模式的示例 Android REST 客户端项目

标签 java android design-patterns rest

我想在安卓手机上构建一个 REST 客户端。

REST 服务器公开了几个资源,例如(获取)

http://foo.bar/customer      List of all customer
http://foo.bar/customer/4711    The customer with id 4711
http://foo.bar/customer/vip     List of all VIP customer

http://foo.bar/company           List of all companys
http://foo.bar/company/4711     The company with the ID 4711
http://foo.bar/company/vip      List of all VIP companys

我(认为)我知道如何与 REST 服务器通信并获取我需要的信息。我会用这样的 API 实现一个 REST 客户端类

public List<Customer> getCustomers();
public Customer getCustomer(final String id);
public List<Customer> getVipCustomer();

public List<Company> getCompanies();
public Customer getCompany(final String id);
public List<Customer> getVipCompanies();

引用了 Virgil Dobjanschi 的演示文稿“Developing Android REST client applications” 我了解到在 Activity 的工作线程中处理 REST 请求不是一个好主意。相反,我应该使用 Service API。

我喜欢有一个绑定(bind)到(本地)服务的 Singleton ServiceHelper 的想法,但我担心我没有正确理解服务概念。

目前我不明白如何将 REST 调用结果(在服务中异步完成)报告回调用方 Activity。我还想知道我是否需要一个服务来处理所有 REST 请求(具有不同的返回类型),或者我是否需要为每个 REST 请求提供专用服务。

可能我还有许多其他的理解问题,所以对我来说最好的事情是满足我的需求的示例应用程序。我的用例并不少见,我希望那里有示例应用程序。

请告诉我!

任何其他指出我正确实现方向的建议也很有帮助(Android API-Demo 与我的用例不匹配)。

提前致谢。

克劳斯

编辑:在 SO 上找到的类似主题(发布后)将我引向我需要的方向(最小化复杂的“Dobjanschi 模式”):

最佳答案

概览

编辑:

任何有兴趣的人也可以考虑看看 RESTful android这可能会让你更好地了解它。

我从尝试实现 Dobjanschi 模型的经验中学到的是,并非一切都是一成不变的,他只为您概述了如何做这可能会因应用程序而异,但公式是:

遵循这个想法 + 添加你自己的 = 快乐的 Android 应用程序

某些应用程序的模型可能因要求而异,有些应用程序可能不需要 SyncAdapter 的帐户,其他应用程序可能使用 C2DM,我最近工作的这个可能会帮助某人:


创建具有 Account 和 AccountManager 的应用程序

它将允许您使用 SyncAdapter 来同步您的数据。这已在 Create your own SyncAdapter 上讨论过

创建一个 ContentProvider (如果它适合您的需要)

这种抽象允许您不仅可以访问数据库,还可以通过 ServiceHelper 执行 REST 调用,因为它具有与 REST Arch 的一对一映射方法。

内容提供者 | REST 方法

查询 ----------------> 获取

插入 ----------------> 放置

更新 ----------------> 发布

删除 ----------------> 删除

ServiceHelper 分层

这个人基本上会使用您从 ContentProvider 传递的参数启动 (a) 服务,这些服务执行 Http(不一定是协议(protocol),但它是最常见的)REST 方法。我传递了从内容提供程序上的 UriMatcher 获得的匹配整数,所以我知道要访问什么 REST 资源,即

class ServiceHelper{

    public static void execute(Context context,int match,String parameters){
//find the service resource (/path/to/remote/service with the match
//start service with parameters 
    }

}

服务

被执行(我大部分时间都使用 IntentService),它使用从助手传递的参数进入 RESTMethod,它有什么用?请记住,服务很适合在后台运行。

还实现一个广播接收器,这样当服务完成它的工作时,通知我的 Activity 注册了这个广播并再次重新查询。我相信这最后一步不在 Virgill Conference 上,但我很确定这是一个不错的选择。

RESTMethod 类

取参数,WS资源(http://myservice.com/service/path)添加参数,准备好一切,执行调用,保存响应。

如果需要 authtoken,您可以向 AccountManager 请求 如果服务调用因为身份验证失败,您可以使 authtoken 失效并重新获得一个新的 token 。

无论我基于匹配器创建处理器并传递响应,RESTMethod 最终都会给我一个 XML 或 JSON。

处理器

它负责解析响应并在本地插入。

示例应用程序?当然!

此外,如果您对测试应用程序感兴趣,请查看 Eli-G ,它可能不是最好的例子,但它遵循 Service REST 方法,它是由 ServiceHelper、Processor、ContentProvider、Loader 和 Broadcast 构建的。

关于java - 需要实现 Virgil Dobjanschi REST 实现模式的示例 Android REST 客户端项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948152/

相关文章:

java - 在 Play Framework 上连接到 as400 JDBC

java - 通过java程序读取大型输入文件(10gb)

android - 在 Android 7.1 中从相机获取图像时无法将结果传递给 Activity

c++ - 在类堆栈之间交换数据

database - Node.JS 中共享数据库句柄的设计模式

Java Server Pages - 插入 MySql 时的排序规则?

java - Android - 比较两个相等的 InetAddress 失败了吗?

android - 无法理解此代码功能

android - 更改可扩展 ListView 的图标

design-patterns - 类数据职责