需要实现Virgil Dobjanschi REST实现模式的示例Android REST Client项目

FrV*_*aBe 82 java rest android design-patterns

我想在Android手机上构建一个REST客户端.

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

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
Run Code Online (Sandbox Code Playgroud)

我(想)我知道如何与REST服务器通信并获取我需要的信息.我将使用这样的API实现REST Client类

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();
Run Code Online (Sandbox Code Playgroud)

参考了Virgil Dobjanschi的" 开发Android REST客户端应用程序 " 演示文稿,我了解到在Activity的Worker Thread中处理REST请求并不是一个好主意.相反,我应该使用服务 API.

我喜欢将Singleton ServiceHelper绑定到(本地)服务的想法,但我担心我不理解服务概念是否正确.

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

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

你能让我知道吗

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

提前致谢.

克劳斯

编辑:在SO上发现的类似主题(发布后),这导致我朝着我需要的方向(最小化复杂的"Dobjanschi模式"):

Nec*_*net 50

概观

编辑:

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

我从尝试实施Dobjanschi模型的经验中学到的是,并非所有内容都是一成不变的,他只是概述了这可能会从应用程序更改为应用程序,但公式为:

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

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


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

它允许您使用SyncAdapter来同步数据.这已在创建您自己的SyncAdapter上讨论过

创建ContentProvider(如果它符合您的需求)

这种抽象不仅允许您访问数据库,还可以访问ServiceHelper来执行REST调用,因为它具有REST Arch的一对一Mapping方法.

内容提供商| REST方法

查询----------------> GET

插入----------------> PUT

更新----------------> POST

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

ServiceHelper分层

这个人将基本上启动(a)执行Http(不一定是协议,但它是最常见的)REST方法的服务,其中包含从ContentProvider传递的参数.我传递了从内容提供商的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 
    }

}
Run Code Online (Sandbox Code Playgroud)

服务

获取执行(我大部分时间都使用IntentService),然后使用从帮助程序传递的参数进入RESTMethod,它有什么用处?记得服务很好,在后台运行东西.

同时实现BroadCastReceiver,以便在服务完成后,通知我的Activity注册了此广播并再次重新查询.我相信最后一步不是在Virgill会议上,但我很确定这是一个很好的方法.

RESTMethod类

获取参数,WS资源(http://myservice.com/service/path)添加参数,准备好所有内容,执行调用并保存响应.

如果需要authtoken,您可以从AccountManager请求如果由于身份验证而导致服务调用失败,您可以使authtoken和reauth无效以获取新令牌.

最后,无论我是基于匹配器创建处理器还是传递响应,RESTMethod都会为我提供XML或JSON.

处理器

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

样品申请?当然!

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


Jer*_*man 17

Android编程有一个完整的章节(13.探索内容提供商),专门用于来自Virgil的Google I/O对话的"选项B:使用ContentProvider API".

我们并不是唯一看到这种方法的好处的人.在2010年5月举行的Google I/O大会上,谷歌的Virgil Dobjanschi发表了一篇演讲,概述了使用内容提供商将RESTful网络服务集成到Android应用程序中的以下三种模式......

在本章中,我们将使用我们的第二个Finch视频示例详细探讨第二种模式; 此策略将为您的应用程序带来许多重要的好处.由于这种方法将网络操作集成到Android MVC中的优雅,我们已经给它命名为"网络MVC".

Android的未来版本可以解决其他两种方法,并记录此Google演示文稿的更多详细信息.阅读完本章后,我们建议您查看Google的演讲.

强烈推荐.

由Zigurd Mednieks,Laird Dornin,G.Blake Meike和Masumi Nakamura编写的Android编程.版权所有2011 O'Reilly Media,Inc.,978-1-449-38969-7.


Chr*_*ipp 11

由Virgil Dobjanschi开发的"开发Android REST客户端应用程序"引发了很多讨论,因为在会话期间没有提供源代码或之后提供了源代码.

如果您了解更多实施,请发表评论.


Sni*_*las 7

我们已经开发了一个解决这个问题的库:RoboSpice.

图书馆使用Virgil DobjanschiNeil Goodmann描述的"服务方法" ,但我们提供完整的一体化解决方案:

  • 异步执行(在后台AndroidService中)将返回POJO的网络请求(例如:REST请求)
  • 缓存结果(在Json,或Xml,或平面文本文件或二进制文件)
  • 如果网络请求仍然存在,则通知您的活动(或任何其他上下文)
  • 如果他们不再活着,则不会通知您的活动结果
  • 通过UI线程通知您的活动
  • 使用简单但强大的异常处理模型
  • 支持多个ContentServices来聚合不同的Web服务结果
  • 支持请求执行的多线程
  • 是强类型的!
  • 是开源的;)
  • 并测试过

我们实际上是在寻求社区的反馈.