当前位置: 首页 > 面试题库 >

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

郁高韵
2023-03-14
问题内容

我想在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

我(认为)我知道如何与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();

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

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

目前,我不了解如何将REST调用结果(在服务中异步完成)报告给调用者活动。我还想知道我是否需要一个可处理所有REST请求(具有不同返回类型)的服务,或者是否需要针对每个REST请求的专用服务。

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

您能告诉我吗?

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

提前致谢。

克劳斯

编辑 :在SO上找到类似的话题(发布此消息之后),这使我朝着我需要的方向(最小化了复杂的“ Dobjanschi模式”):

  • Android:RESTful API服务

问题答案:

概观

编辑:

任何感兴趣的人还可以考虑看看 RESTful android,这可能会让您对此有更好的了解。

我从尝试实现Dobjanschi模型的经验中学到的是,并不是所有事情都是一成不变的,他只是为您提供了可能会因应用程序而异的概述,但公式为:

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

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

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

它将允许您使用SyncAdapter同步数据。在创建自己的SyncAdapter上已对此进行了讨论

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

这种抽象使您不仅可以访问数据库,而且可以使用ServiceHelper来执行REST调用,因为它具有REST Arch的一对一映射方法。

内容提供者| REST方法

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

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

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

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

ServiceHelper分层

这个家伙基本上将使用从ContentProvider传递的参数来启动执行Http(不一定是协议,但这是最常见的)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,这有什么用?请记住,服务是在后台运行事物的好方法。

还要实现BroadCastReceiver,以便当服务完成其工作时,通知我的Activity已注册此Broadcast并再次重新查询。我相信这不是Virgill会议的最后一步,但是我敢肯定这是一个不错的方法。

RESTMethod类

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

如果需要身份验证,则可以从AccountManager请求。如果由于身份验证而导致服务调用失败,则可以使身份验证无效并重新身份验证以获取新的令牌。

最终,无论我基于匹配器创建处理器并传递响应,RESTMethod都可以为我提供XML或JSON。

处理器

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

示例应用程序?当然!

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



 类似资料:
  • 本文向大家介绍PHP实现的策略模式示例,包括了PHP实现的策略模式示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现的策略模式。分享给大家供大家参考,具体如下: 个人觉得设计模式只有在实际应用中才能够慢慢的去熟悉,到最后做到心中有模式,事事有模式,哈哈 例如:一个电商首页,可以根据登陆用户的性别不同显示不同的内容,比如广告和商品类别。 传统方法:在程序内部使用多个if,else

  • 本文向大家介绍Android 画中画模式的实现示例,包括了Android 画中画模式的实现示例的使用技巧和注意事项,需要的朋友参考一下 画中画支持 Android 8.0(API 级别 26)允许以画中画模式启动 Activity。画中画是一种特殊类型的多窗口模式,最常用于视频播放。使用该模式,用户可以通过固定到屏幕一角的小窗口观看视频,同时在应用之间进行导航或浏览主屏幕上的内容。 画中画利用 A

  • 本文向大家介绍c# 单例模式的实现,包括了c# 单例模式的实现的使用技巧和注意事项,需要的朋友参考一下   记一下学习单例模式的笔记:   单例就是要保证该类仅有一个实例。实现完全封闭的单例(外部不能new)其实就要两点要求: 全局访问:需要一个该类型的全局静态变量,每次获取实例时都要判断它是否null,不存在new,存在通过一个方法直接返回该值获取实例来保证对象唯一; 实例化控制:new实例不能

  • 本文向大家介绍PHP实现的策略模式简单示例,包括了PHP实现的策略模式简单示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现的策略模式。分享给大家供大家参考,具体如下: 比如说购物车系统,在给商品计算总价的时候,普通会员肯定是商品单价乘以数量,但是对中级会员提供8者折扣,对高级会员提供7折折扣,这种场景就可以使用策略模式实现: 更多关于PHP相关内容感兴趣的读者可查看本站专题:

  • 本文向大家介绍JavaScript实现单例模式实例分享,包括了JavaScript实现单例模式实例分享的使用技巧和注意事项,需要的朋友参考一下 传统单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 实现单例核心思想 无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象,接下来我们用JavaScript来强行实现这个思路,请

  • 本文向大家介绍C++实现模板方法模式的示例代码,包括了C++实现模板方法模式的示例代码的使用技巧和注意事项,需要的朋友参考一下 模式定义 模板方法模式(Facade),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模式动机 当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不