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,我最近工作的这个可能会帮助某人:
它允许您使用SyncAdapter来同步数据.这已在创建您自己的SyncAdapter上讨论过
这种抽象不仅允许您访问数据库,还可以访问ServiceHelper来执行REST调用,因为它具有REST Arch的一对一Mapping方法.
内容提供商| REST方法
查询----------------> GET
插入----------------> PUT
更新----------------> POST
删除---------------->删除
这个人将基本上启动(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会议上,但我很确定这是一个很好的方法.
获取参数,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客户端应用程序"引发了很多讨论,因为在会话期间没有提供源代码或之后提供了源代码.
如果您了解更多实施,请发表评论.
我们已经开发了一个解决这个问题的库:RoboSpice.
图书馆使用Virgil Dobjanschi和Neil Goodmann描述的"服务方法" ,但我们提供完整的一体化解决方案:
我们实际上是在寻求社区的反馈.
| 归档时间: |
|
| 查看次数: |
38987 次 |
| 最近记录: |