当前位置:首页 » 安卓系统 » android与rest

android与rest

发布时间: 2022-06-08 04:43:14

❶ 怎样为网站的Android客户端开发RESTful的API

简单来说就是将网站的功能移植到API方式,主要就是数据格式的变化 html to json or xml
看看微博,豆瓣的 API 文档,看看他们和自身网站的对应关系。
PS: 抓包分析下知乎的客户端也是可以的 ;)

❷ resttemplate 在安卓端是怎么实现的

Spring 是一种用于运行 java 企业应用程序的平台,它提供几个优点,比如说提高了生产率和运行时性能。Spring Android 是 Spring 框架的一个扩展,它简化了 Android 应用程序的开发。Spring Android 的主要特性是一个针对 Android 的 REST 客户端和对访问安全 API 的 Auth 支持。
本文中,将学习利用 Spring Android REST 客户端访问 RESTful web 服务。

❸ 最实用的Android开发资源有哪些

1. Android Annotations
Android Annotations是一个能够加速Android开发的开源框架,它可以帮助开发者处理一些前后台任务、rest服务、应用类、代码片段等,让开发者专注于真正重要的东西。
2. ActionBarSherlok
ActionBarSherlock是一个扩展的Android支持库,旨在允许开发者通过一个单一的API,在所有的Android版本中都能够非常方便地使用活动栏设计模式。
3. Spring Android
Java开发者应该比较熟悉,这是一个针对Android开发的Spring框架。使用最多的是RestTemplate功能,此外,AndroidAnnotations已经支持Spring Rest Template,使得编写REST客户端更加容易。
4. URLImageViewHelper
如果想在应用程序中通过URL来加载远程图像,这是最好的选择。URLImageViewHelper提供了辅助类,可以很容易地加载远程图像,同时还提供了图像缓存功能。
5. SubtlePatterns
SubtlePatterns提供了一些高质量的纹理图案资源,图案都非常适合作为应用背景,并且使用也很简单。可以点击这里来看如何在应用中使用这些图案。
6. Sliding Menu(滑动菜单)
顾名思义,SlidingMenu是一个在Android应用中添加滑动菜单效果的库,尽管网上还有一些其他类似的库,但发现从性能和易于集成方面,SlidingMenu是最好的。
7. Android ViewPagerIndicator
一个非常棒的库,用于在一个多页面切换视图中指示当前的页面。
8. Vogella Android教程
vogella团队几乎已经将Android开发中的所有事情做成了教程,对于开发入门非常有帮助。
9. Android-PullToRefresh
针对Android的下拉刷新库。
10. 谷歌的Android教程
开始Android开发必备的指南、培训资源。
11. Commonsware Github库
几款Android应用开发库,可以使开发工作更加轻松。

❹ android四大组件的作用

Android 开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库

  1. 活动

Android中,activity是所有程序的根本,所有程序的流程都运行在activity之中,activity可以算是开发者遇到的最频繁,也是android当中最基本的模块之一。在android的程序中,activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么activity就相当于一个网页。在activity当中可以添加一些Button、Checkbox等控件,可以看到activity概念和网页的概念相当类似。

一般一个android应用是由多个activity组成的,这多个activity之间可以进行相互跳转。例如,按下一个Button按钮后,可能会跳转到其他的activity,与网页跳转稍微有点不一样的是,activity之间的跳转有可能返回值。例如,从activity A跳转到activity B,那么当activity B运行结束时,有可能会给activity A一个返回值。这样做在很多时候是相当方便的。

当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。可以选择性的一处一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。

Android 开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库。

2.服务

Service是android系统中的一种组件,跟activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service是没有界面长生命周期的代码。Service是一种程序,可以运行很长时间的,但是却没有用户界面。这么说有点枯燥,来看个例子。打开一个音乐播放器的程序,这时如果想上网,那么打开Android浏览器,这时虽然已经进入浏览器这个程序,但是歌曲播放并没有停止,而是在后台继续一首接一首的播放,其实这个播放就是由播放音乐的Service进行控制。当然这个播放音乐的Service也可以停止。例如,当播放列表里的歌曲都结束,或用户按下了停止音乐播放的快捷键等。Service可以在很多场合的应用中使用,如播放多媒体时用户启动了其他Activity,这时程序要在后台继续播放,比如检测SD卡上文件的变化,或在后台记录地理信息位置的改变等,而服务却藏在后台。

开启Service有两种方式:

(1)Context.starService():Service会经历onCreat ——>onStar(如果Service还没有运行,则Android先调用onCreat(),然后调用onStar(),所以一个Service的onStar方能会重复调用多次);如果是调用者自己直接退出而没有调用StopService,服务会一直在后台运行。该服务的调用者再启动起来后可以通过stopService关闭服务。注意,多次调用Context.starService()不会被嵌套(即使会有相应的onStar()方法被调用),所以无论同一个服务被启动多少次,一旦调用Context.stopService()或者StopSelf(),都会被停止。

说明:传递给starService()的Intent对象会传递给onStar()方法。调用顺序为onCreat——onStar(可调用多次)——onDestroy.

(2)Context.bindService():服务会经历onCreate()——onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到服务运行的状态或其他操作。这个时候把调用者(Context,如Activity)会和服务绑定在一起,Context退出了,服务就会调用onUnbind——onDestroy相应退出,所谓绑定在一起就是“共存亡”了。

3.广播接收器

在Android中,广播是一种广泛运用的在应用程序之间传输信息的机制。而广播接收器是对发送出来的广播进行过滤接受并响应的一类组件。可以使用广播接收器来让应用对一个外部时间做出响应。例如,当电话呼入这个外部事件到来时,可以利用广播接收器进行处理。当下载一个程序成功完成时,仍然可以利用广播接收器进行处理。广播接收器不NotificationManager来通知用户这些事情发生了。广播接收器既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceive()进行注册。只要是注册了,当事件来临时,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用Context.sendBroadcast()将它们自己的Intent广播给其他应用程序。

4.内容提供者

内容提供者(Content Provider)是Android提供的第三方应用数据的访问方案。

在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。Android当然不会真的把每一个应用都做成一座“孤岛”,它为所有应用都准备可一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生Content Provider类,封装成一枚Content Provider。每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有应用看着像REST的样子,但实际上它比REST更为灵活。和REST类似,uri也可以有两种类型,一种是带id的;另一种是列表的,但实现者不需要按照这个模式来做,给id的uri也可以返回列表类型的数据。

❺ 安卓开发的基础问题

1. 资源
所有的UI指南都可以在这里找到。有些时候我们需要快速地找到资源,我们需要工具栏图标、主题、其他图标和各种安卓应用需要的设计资源。Android Assets Studio是最佳工具之一。它可以为你生成各种分辨率 (mdpi, hdpi, xhdpi)的启动器、标签、工具栏、菜单图标,可以按照你的配色生成主题,还可以生成工具栏资源 适用于Sherlock Action Bar。转换和缩放DPI是很痛苦的,所以你需要Android Dpi Calculator
2. UI组件
只要遵循安卓官方的UI设计理念,我们就在重用UI组件。有很多优秀的通用组件可以利用,当然你可以基于他们开发适合自己的组件。你可以在Android Views上找到他们。这里我只提出几个“必备的”组件:
Sherlock Action Bar:作者Jake Wharton。这个工具栏设计扩展了支持函数库,可以通过一个API操作各个版本的安卓工具栏。该函数库会在合适的时候自动调用原生工具栏,也可以在你布局基础上封装一个自定义实现。这样你就可以很轻松地为各种2.x及以上的安卓版本开发一个带工具栏的应用。
Sliding Menu :这是时下非常流行的UI模式。Google Play市场上很多最佳应用都采用了这个UI模式,比如Google Plus、Facebook、Youtube以及其他的应用程序都采用了Sliding Menu。
Cards:一个非常漂亮简介的UI组件,可以让你的应用看起来和Google Home一样。你可以在屏幕上添加一个或者层叠若干个卡片。
3. 函数库
安卓应用不仅仅是UI,还包括了很多颜色和图片资源。Optimus Prime(译着:《变形金刚》里面正义一方的领袖)曾经说过:“真相不只是眼前所见”。我们还需要编写后台代码加载和缓存图片、加快与服务器通讯、编写数据库操作工具等等。接下来,我们理所应当地会重用一些最佳实践代码。我的最爱(以及常用的工具)包括:
Android Universal Loader:高度可定制图片下载和加载函数库。支持从缓存或文件加载,配置非常简单。
Spring for Android:如果你没有听说过Spring…那么请先去搜索一下。这个最流行的Java框架已经将他的产品线延伸到了移动领域。正如他们所说“移动就是未来”。Spring for android提供了几个很棒的函数库和框架,包括:
Spring RESTtemplate:一个非常流行的基于Java REST客户端。Spring for Android RestTemplate模块提供了一个可以在安卓环境下工作的RestTemplate版本,为你的安卓应用程序提供了一个非常灵活的REST API。
验证支持:OAuth是该领域快速崛起一个的协议。OAuth是一个开源协议,为用户提供第三方应用支持,提供对其他网站受限资源或服务的访问。
Square:他们在GitHub上发布了很多优秀的函数库。我最喜欢的是RetoFit,正如他的介绍那样“一个类型安全的安卓和Java REST客户端”。
OrmLite :编写和维护数据库表通常是很乏味的。OrmLite是一个支持安卓和sqlite的ORM框架。通常完成这项工作会有数不清的备选工具,但是如果你正在创建一个需要很大数据库的应用也许OrmLite会是你的最佳选择。最好的事情是——OrmLite是通过注解驱动的。
AndroidAnnotations:UI和代码之间的粘合剂,通过它可以编写更少的代码并且轻松维护现存的代码。
4. 测试
作为开发者,我们会不时地进行一些测试。毕竟,我们必须确保开发的程序能正常工作。能遵循测试驱动开发(TDD)当然最好,但是有时候我们只需要一些简单的测试。这只是我个人的看法,最终选择权始终在你手上。
Monkey:检查应用是否会出现ANR(译者注: ApplicationNotResponding应用程序无响应)的最简单、快速和有效的方法。它会在你的应用上执行N次随机点击。你可以在午休时运行一下Monkey。
Android Test :一个基于JUnit的安卓测试框架。它提供了所有类型的测试。你可以为UI/活动编写测试用例。功能测试或者黑盒UI测试不要求测试者对应用的实现细节非常了解,只需要从用户角度了解执行特定动作或者输入特定内容会有怎样的输出结果。这个方法可以让开发和测试人员在你的组织里独立地工作。
Robotium :这是一个安卓自动化测试框架,支持原生应用和混合型应用。通过Robotium你可以轻松地编写功能强大、健壮性好的黑盒测试用例。测试开发者可以编写涵盖各种安卓操作的功能测试、系统测试和验收测试用例。此外,Robotium还有一个非常活跃的开发者论坛。
云端测试:你可以在大量设备上运行你的测试并获得所有崩溃和错误信息。相关的工具有:
Skyforge
BitBar
CloudMonkey
Perfecto Mobile
他们不是免费的,但确实好用。
5. 构建
这是我最喜欢的部分。我们日复一日、年复一年地工作…..是时候展示自己的产品了。你的应用可能会分付费版、免费版或专属版。他们会有通用的部分和一些专有逻辑。也许你会有一个为100个客户定制的应用,不同的包名、颜色、名称、各种资源和产品风格…..我刚才提到了构建版本吗?一个开发版、不同阶段的测试版、生产测试版、客户Beta版…..(软件版本命名)等等。
在一天工作结束的时候,秘密就在维护和管理发布流程。对于这项工作,我只推荐下面几个构建工具。
Ant:我从Ant开始,因为它是Java开发者最熟悉的一个工具。如果你通过Ant构建一个安卓项目,你会编写一个包含了所有默认构建任务的build.xml,它会为你完成一些简单的工作。如果你需要更高级的功能,深呼吸准备好进一步钻研吧……如果要进行依赖管理,这是更艰巨的任务。
Maven:我的一个朋友曾经说过:“Maven管理安卓应用只有Hello World”。Maven从未被谷歌或者安卓官方支持。社区开发的几个Maven插件在安卓构建工具的每个新版本上都会崩溃。Maven配置困难,但维护和运行很容易。它的依赖管理做的很好,但是很多安卓函数库并没有包含在Maven主仓库。
Gradle:谷歌IO 2013发布了Gradle。它是安卓官方支持的构建工具,也是Android Studio IDE的一部分。Spring和其他几个业界巨头也都支持Gradle。我发现Gradle的语法简单而且易于理解。我成功地构建了一个简单项目,一个带有复杂构建逻辑的项目并在24小时内从ant/maven上移植了3个项目到Gradle。Gradle的依赖管理很棒,支持从Maven和Ivy仓库获取(pulling)文件以及多项目构建。

❻ android手机里qq rest文件夹是什么啊

一个没有价值的文件夹 既没有帐号也没有密码更没有任何可二次利用的缓存数据

如果你不是搞IT技术的直接无视就行了 记得不要删除,可能会引起系统不稳定

❼ Android四大组件是什么讲讲你对它们的理解

Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。

Activity

做一个完整的Android程序,不想用到Activity,真的是比较困难的一件事情,除非是想做绿叶想疯了。因为Activity是Android程序与用户交互的窗口,在我看来,从这个层面的视角来看,Android的Activity特像网站的页面。

Activity,在四大组件中,无疑是最复杂的,这年头,一样东西和界面挂上了勾,都简化不了,想一想,独立做一个应用有多少时间沦落在了界面上,就能琢磨清楚了。从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元素。从内部逻辑来看,Activity需要为了保持各个界面状态,需要做很多持久化的事情,还需要妥善管理生命周期,和一些转跳逻辑。对于开发者而言,就需要派生一个Activity的子类,然后埋头苦干上述事情。对于Activity的更多细节,先可以参见:reference/android/app/Activity.html。后续,会献上更为详尽的剖析。

Service

服务,从最直白的视角来看,就是剥离了界面的Activity,它们在很多Android的概念方面比较接近,都是封装有一个完整的功能逻辑实现,只不过Service不抛头露脸,只是默默无声的做坚实的后盾。

但其实,换个角度来看,Android中的服务,和我们通常说的Windows服务,Web的后台服务又有一些相近,它们通常都是后台长时间运行,接受上层指令,完成相关事务的模块。用运行模式来看,Activity是跳,从一个跳到一个,呃...,这有点像模态对话框(或者还像web页面好了...),给一个输入(抑或没有...),然后不管不顾的让它运行,离开时返回输出(同抑或没有...)。

而Service不是,它是等,等着上层连接上它,然后产生一段持久而缠绵的通信,这就像一个用了Ajax页面,看着没啥变化,偷偷摸摸的和Service不知眉来眼去多少回了。

但和一般的Service还是有所不同,Android的Service和所有四大组件一样,其进程模型都是可以配置的,调用方和发布方都可以有权利来选择是把这个组件运行在同一个进程下,还是不同的进程下。这句话,可以拿把指甲刀刻进脑海中去,它凸显了Android的运行特征。如果一个 Service,是有期望运行在于调用方不同进程的时候,就需要利用Android提供的RPC机制,为其部署一套进程间通信的策略。

Android的RPC实现,如上图所示(好吧,也是从SDK中拿来主义的...),无甚稀奇,基于代理模式的一个实现,在调用端和服务端都去生成一个代理类,做一些序列化和反序列化的事情,使得调用端和服务器端都可以像调用一个本地接口一样使用RPC接口。

Android中用来做数据序列化的类是Parcel,参见:/reference/android/os/Parcel.html,封装了序列化的细节,向外提供了足够对象化的访问接口,Android号称实现非常高效。

还有就是AIDL (Android Interface Definition Language) ,一种接口定义的语言,服务的RPC接口,可以用AIDL来描述,这样,ADT就可以帮助你自动生成一整套的代理模式需要用到的类,都是想起来很乏力写起来很苦力的那种。更多内容,可以再看看:guide/developing/tools/aidl.html,如果有兴致,可以找些其他PRC实现的资料lou几眼。

关于Service的实现,还强推参看API Demos这个Sample里面的RemoteService实现。它完整的展示了实现一个Service需要做的事情:那就是定义好需要接受的Intent,提供同步或异步的接口,在上层绑定了它后,通过这些接口(很多时候都是RPC的...)进行通信。在RPC接口中使用的数据、回调接口对象,如果不是标准的系统实现(系统可序列化的),则需要自定义aidl,所有一切,在这个Sample里都有表达,强荐。

Service从实现角度看,最特别的就是这些RPC的实现了,其他内容,都会接近于Activity的一些实现,也许不再会详述了。

Broadcast Receiver

在实际应用中,我们常需要等,等待系统抑或其他应用发出一道指令,为自己的应用擦亮明灯指明方向。而这种等待,在很多的平台上,都会需要付出不小的代价。

比如,在Symbian中,你要等待一个来电消息,显示归属地之类的,必须让自己的应用忍辱负重偷偷摸摸的开机启动,消隐图标隐藏任务项,潜伏在后台,监控着相关事件,等待转瞬即逝的出手机会。这是一件很发指的事情,不但白白耗费了系统资源,还留了个流氓软件的骂名,这真是卖力不讨好的正面典型。

在Android中,充分考虑了广泛的这类需求,于是就有了Broadcast Receiver这样的一个组件。每个Broadcast Receiver都可以接收一种或若干种Intent作为触发事件(有不知道Intent的么,后面会知道了...),当发生这样事件的时候,系统会负责唤醒或传递消息到该Broadcast Receiver,任其处置。在此之前和这以后,Broadcast Receiver是否在运行都变得不重要了,及其绿色环保。

这个实现机制,显然是基于一种注册方式的,Broadcast Receiver将其特征描述并注册在系统中,根据注册时机,可以分为两类,被我冠名为冷热插拔。所谓冷插拔,就是Broadcast Receiver的相关信息写在配置文件中(求配置文件详情?稍安,后续奉上...),系统会负责在相关事件发生的时候及时通知到该Broadcast Receiver,这种模式适合于这样的场景。某事件方式 -> 通知Broadcast -> 启动相关处理应用。比如,监听来电、邮件、短信之类的,都隶属于这种模式。而热插拔,顾名思义,插拔这样的事情,都是由应用自己来处理的,通常是在 OnResume事件中通过registerReceiver进行注册,在OnPause等事件中反注册,通过这种方式使其能够在运行期间保持对相关事件的关注。比如,一款优秀的词典软件(比如,有道词典...),可能会有在运行期间关注网络状况变化的需求,使其可以在有廉价网络的时候优先使用网络查询词汇,在其他情况下,首先通过本地词库来查词,从而兼顾腰包和体验,一举两得一石二鸟一箭双雕(注,真实在有道词典中有这样的能力,但不是通过 Broadcast Receiver实现的,仅以为例...)。而这样的监听,只需要在其工作状态下保持就好,不运行的时候,管你是天大的网路变化,与我何干。其模式可以归结为:启动应用 -> 监听事件 -> 发生时进行处理。

除了接受消息的一方有多种模式,发送者也有很重要的选择权。通常,发送这有两类,一个就是系统本身,我们称之为系统Broadcast消息,在reference/android/content/Intent.html 的Standard Broadcast Actions,可以求到相关消息的详情。除了系统,自定义的应用可以放出Broadcast消息,通过的接口可以是 Context.sendBroadcast,抑或是Context.sendOrderedBroadcast。前者发出的称为Normal broadcast,所有关注该消息的Receiver,都有机会获得并进行处理;后者放出的称作Ordered broadcasts,顾名思义,接受者需要按资排辈,排在后面的只能吃前面吃剩下的,前面的心情不好私吞了,后面的只能喝西北风了。

当Broadcast Receiver接收到相关的消息,它们通常做一些简单的处理,然后转化称为一条Notification,一次振铃,一次震动,抑或是启动一个 Activity进行进一步的交互和处理。所以,虽然Broadcast整个逻辑不复杂,却是足够有用和好用,它统一了Android的事件广播模型,让很多平台都相形见绌了。更多Broadcast Receiver相关内容,参见:/reference/android/content/BroadcastReceiver.html。

Content Provider

Content Provider,听着就和数据相关,没错,这就是Android提供的第三方应用数据的访问方案。在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他直接访问的,但有时候,沟通是必要的,不仅对第三方很重要,对应用自己也很重要。

比如,一个联系人管理的应用。如果不允许第三方的应用对其联系人数据库进行增删该查,整个应用就失去了可扩展力,必将被其他应用抛弃,然后另立门户,自个玩自个的去了。

Andorid当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生ContentProvider类, 封装成一枚Content Provider,每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有东西看着像REST的样子,但实际上,它比REST 更为灵活。和REST类似,uri也可以有两种类型,一种是带id的,另一种是列

表的,但实现者不需要按照这个模式来做,给你id的uri你也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。

另外,Content Provider不和REST一样只有uri可用,还可以接受Projection,Selection,OrderBy等参数,这样,就可以像数据库那样进行投影,选择和排序。查询到的结果,以Cursor(参见:reference/android/database/Cursor.html )的形式进行返回,调用者可以移动Cursor来访问各列的数据。

Content Provider屏蔽了内部数据的存储细节,向外提供了上述统一的接口模型,这样的抽象层次,大大简化了上层应用的书写,也对数据的整合提供了更方便的途径。Content Provider内部,常用数据库来实现,Android提供了强大的Sqlite支持,但很多时候,你也可以封装文件或其他混合的数据。

在Android中,ContentResolver是用来发起Content Provider的定位和访问的。不过它仅提供了同步访问的Content Provider的接口。但通常,Content Provider需要访问的可能是数据库等大数据源,效率上不足够快,会导致调用线程的拥塞。因此Android提供了一个AsyncQueryHandler(参见:reference/android/content/AsyncQueryHandler.html),帮助进行异步访问Content Provider。

在各大组件中,Service和Content Provider都是那种需要持续访问的。Service如果是一个耗时的场景,往往会提供异步访问的接口,而Content Provider不论效率如何,都提供的是约定的同步访问接口。我想这遵循的就是场景导向设计的原则,因为Content Provider仅是提供数据访问的,它不能确信具体的使用场景如何,会怎样使用它的数据;而相比之下,Service包含的逻辑更复杂更完整,可以抉择大部分时候使用某接口的场景,从而确定最贴切的接口是同步还是异步,简化了上层调用的逻辑。

❽ 如何在Android使用Rest 服务

我们就以如下网络商店的Rest服务为例,看看我们通过Android客户端是如何进行调用的(这里只介绍如何发送请求,并获得服务器响应)。

Android类库中已经为我们提供了一切我们需要的东西。
Rest的原理就是向一个资源的URI发送GET、POST、PUT和DELETE进行获取、创建、保存、删除操作。

第一步我们看看如何请求获得所有商品信息:
//创建一个http客户端
HttpClient client=new DefaultHttpClient();
//创建一个GET请求
HttpGet httpGet=new HttpGet("http://www.store.com/procts");
//向服务器发送请求并获取服务器返回的结果
HttpResponse response=client.execute(httpGet);
//返回的结果可能放到InputStream,http Header中等。
InputStream inputStream=response.getEntity().getContent();
Header[] headers=response.getAllHeaders();
通过解析服务器返回的流,我们可以将它转为字符串,获取相应的数据。

第二步可以向服务器增加商品,同样的道理,我们创建一个POST请求,带上相关的商品信息即可。
//创建一个http客户端
HttpClient client=new DefaultHttpClient();
//创建一个POST请求
HttpPost httpPost=new HttpPost("http://www.store.com/proct");
//组装数据放到HttpEntity中发送到服务器
final List dataList = new ArrayList();
dataList.add(new BasicNameValuePair("proctName", "cat"));
dataList.add(new BasicNameValuePair("price", "14.87"));
HttpEntity entity = new UrlEncodedFormEntity(dataList, "UTF-8");
httpPost.setEntity(entity);
//向服务器发送POST请求并获取服务器返回的结果,可能是增加成功返回商品ID,或者失败等信息
HttpResponse response=client.execute(httpPost);
第三步是如果修改商品信息,我们只需要创建一个PUT请求,带上要修改的参数即可。本例假设第三步中增加的商品返回ID为1234,下面将为商品的价格修改为11.99.

//创建一个http客户端
HttpClient client=new DefaultHttpClient();
//创建一个PUT请求
HttpPut httpPut=new HttpPut("http://www.store.com/proct/1234");
//组装数据放到HttpEntity中发送到服务器
final List dataList = new ArrayList();
dataList.add(new BasicNameValuePair("price", "11.99"));
HttpEntity entity = new UrlEncodedFormEntity(dataList, "UTF-8");
httpPut.setEntity(entity);
//向服务器发送PUT请求并获取服务器返回的结果,可能是修改成功,或者失败等信息
HttpResponse response=client.execute(httpPut);
第四步我们把上面增加的商品删除,只需要向服务器发送一个DELETE请求即可。

//创建一个http客户端
HttpClient client=new DefaultHttpClient();
//创建一个DELETE请求
HttpDelete httpDelete=new HttpDelete("http://www.store.com/proct/1234");
//向服务器发送DELETE请求并获取服务器返回的结果,可能是删除成功,或者失败等信息
HttpResponse response=client.execute(httpDelete);
好了,就这么简单,这样就实现了从android客户端调用Rest服务对资源进行增、删、改、查操作。

希望本文对您有所帮助!

❾ android有几种请求方式okhttp restful

这个问题有点问题,这并不是三种方式,okhttp只是对网络访问的一个更高层的封装,httpURLConnection和httpClient是具体两种实现访问的方式。

❿ 一个最简单的供Android调用webService的rest服务端怎么搭建

Eclipse+Axis2构建WebService实战总结

什么是webservice?

企业提供特定的服务service,其他用户通过internet即web访问这些服务。换句话说,WebService是两个计算机之间通讯(交谈)的技术,网络中一台计算机想要调用另一台计算机的方法时,此时可以需要WebService。很火的SOA、云计算在技术层面上都是WebService

用程序员的观点就是:企业提供实现某功能的函数,其他用过通过在线访问这些函数。

webservice两个重要文件:.aar:服务包文件,提供服务,.wsdl:web服务接口定义语言文件,供客户端使用。

webservice关键技术

1、XML:可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。

2、SOAP:SOAP是web service的标准通信协议,SOAP为simple object access protocoll的缩写,简单对象访问协议.它是一种标准化的传输消息的XML消息格式。即XML文件的消息格式,由这个协议来决定。SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,xml作为数据传送的格式。

3、Axis2:Axis2是实现Web Service的一种技术框架,是新一代的SOAP引擎,即通过这个架构很方便地实现webservice.即在服务端通过这个技术支持,很方便地发布webservice服务,使开发只关注具体的商业实现,而由这个框架直接发布,节省了开发者的时间。在客户端同样只关注调用。为了使用这个框架,在3个地方需要部署Axis2的库:web服务器tomcat上、eclipse服务端开发axis2库、eclipse客户端开发ksoap2库。

4、WSDL:WSDL的全称是web service Description Language,是一种基于XML格式的关于web服务的描述语言。其主要目的在于web service的提供者将自己的web服务的所有相关内容,如所提供的服务的传输方式,服务方法接口,接口参数,服务路径等,生成相应的完全文档,发布给使用者。使用者可以通过这个WSDL文档,创建相应的SOAP请求消息,通过HTTP传递给webservice提供者;web服务在完成服务请求后,将SOAP返回消息传回请求者,服务请求者再根据WSDL文档将SOAP返回消息解析成自己能够理解的内容。

5、UDDI:UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。UDDI,英文为 "Universal Description, Discovery and Integration",可译为“通用描述、发现与集成服务”。UDDI是一种创建注册表服务的规范,以便大家将自己的web service进行注册发布供使用者查找.然而当服务提供者想将自己的web service向全世界公布,以便外部找到其服务时,那么服务提供者可以将自己的web service注册到相应的UDDI商用注册网站,目前全球有IBM等4家UDDI商用注册网站。因为WSDL文件中已经给定了web service的地址URI,外部可以直接通过WSDL提供的URI进行相应的web service调用。所以UDDI并不是一个必需的web service组件,服务方完全可以不进行UDDI的注册。

webservice服务端的实现

1、tomcat服务器部署:部署Axis2到tomcat:将Axis2.war解压到tomcat的webapps目录下即可,如果有数据库连接,需把数据库连接jar包添加到tomcat的lib目录下,如:oracle的ojdbc14.jar,和mysql的 mysql-connector-java-3.1.11-bin.jar。部署成功后,启动tomcat,可通过http://localhost:8080/axis2/访问,查看是否部署成功。webservice的axis服务存档aar发布文件就发布到tomcat\webapps\axis2\WEB-INF\services这个目录下

2、安装axis2插件到eclipse:解压插件,直接拷贝到eclipse的插件目录plugins,两个插件为:org.apache.axis2.eclipse.codegen.plugin_1.6.0.jar、org.apache.axis2.eclipse.service.plugin_1.6.0.jar。打开Eclipse,选择File/New/Other菜单项,看到如下界面表明安装成功:

安装这两个插件的目的是:方便生成Axis2的服务包(.aar文件)和生成Axis2客户端

3、打包生成axis2服务包:

选择服务程序类文件所在的目录,不包括包,选中Include..,表示在生成的服务包中只包括类文件,不包括其他文件。

选择跳过WSDL文件,WSDL文件会在部署这个服务到Tomcat后,有Axis2自动生成,通过http://localhost:8080/axis2/services/newWs?wsdl可以查看文件内容。

注意:WSDL是web服务定义语言,通过XML的方式对该服务类进行描述,客户端访问服务时要用到这个文件,可以生成这个文件给客户端,也可以上面的在线获取这个文件。

点击“next”,进入添加服务需要的库文件界面:

需要的库文件直接部署到tomcat中,此处不需要添加,进入下一界面:

选择自动生成service.xml文件。点击进入下一界面:

输入服务名和类名,点击load即可找出该服务程序的全部方法。

输入发布路径,和文件名。生成newWs.aar服务包文件。

部署完成后,输入http://localhost:8080/axis2/services/listServices,即可看到已部署的全部服务。

eclipse中webservice不能发布的原因:

1、界面问题,把发布界面最大化或拖拽,是界面刷新,就可以看到输入界面了。

2、发布界面最后一步,load时,没有任何反映,是这个类的代码有问题,例如有加载动态库的代码,动态库找不到,则会没有反映。

3、代码没改变的情况下好像只能生成一次,想在生成的话,需要改代码,或需要重启eclipse

webservie服务端:java调用C++动态库的实现

1、在eclipse中编写一个java类文件,应用中的其他类可以调用这个类中的函数:

[cpp] view plainprint?
01.package util;
02.
03.public class InvokeDll
04.{
05. //测试函数
06. public native int testFunc(int a, int b);
07.
08. //获取最近一次错误代码
09. public native int lastErr();
10.}
package util;

public class InvokeDll
{
//测试函数
public native int testFunc(int a, int b);

//获取最近一次错误代码
public native int lastErr();
}

注意:函数要用native修饰符

2、用javah命令生成C++可调用的.h文件

a、上述java类编译生成类文件InvokeDll.class

b、set classpath="D:\teatInvokeDll\bin",类文件生成在D:\testInvokeDll\bin\util\InvokeDll.class
c、命令行进入D:\teatInvokeDll\bin

d、javah util.InvokeDll
你会发现当前目录下多了一个util_InvokeDll.h文件,文件内容如下:

[cpp] view plainprint?
01./* DO NOT EDIT THIS FILE - it is machine generated */
02.#include <jni.h>
03./* Header for class util_InvokeDll */
04.
05.#ifndef _Included_util_InvokeDll
06.#define _Included_util_InvokeDll
07.#ifdef __cplusplus
08.extern "C" {
09.#endif
10./*
11. * Class: util_InvokeDll
12. * Method: testFunc
13. * Signature: (II)I
14. */
15.JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc
16. (JNIEnv *, jobject, jint, jint);
17.
18./*
19. * Class: util_InvokeDll
20. * Method: lastErr
21. * Signature: ()I
22. */
23.JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr
24. (JNIEnv *, jobject);
25.
26.#ifdef __cplusplus
27.}
28.#endif
29.#endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class util_InvokeDll */

#ifndef _Included_util_InvokeDll
#define _Included_util_InvokeDll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: util_InvokeDll
* Method: testFunc
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc
(JNIEnv *, jobject, jint, jint);

/*
* Class: util_InvokeDll
* Method: lastErr
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
3、在VC中生成dll如java2dll.dll

a、新建一个空的dll工程,名叫java2dll。

b、把util_InvokeDll.h头文件复制到工程目录下,并添加到header files文件夹里。

c、在source files文件目录中添加一个java2dll.cpp,文件内容是头文件里的方法的实现:

[cpp] view plainprint?
01.#include <stdio.h>
02.#include "util_InvokeDll.h"
03.
04.JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc(JNIEnv *, jobject, jint a, jint b)
05.{
06. int i=0;
07. /*HMODULE hMole = ::LoadLibrary("test.dll");
08.
09. PFUN newfun = (PFUN)::GetProcAddress(hMole,"testFn");
10. i = newfun(a,b);
11. ::FreeLibrary(hMole);
12. */
13. i=a+b;
14. return i;
15.}
16.
17.JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr(JNIEnv *, jobject)
18.{
19. int i=0;
20. return i;
21.}
#include <stdio.h>
#include "util_InvokeDll.h"

JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc(JNIEnv *, jobject, jint a, jint b)
{
int i=0;
/*HMODULE hMole = ::LoadLibrary("test.dll");

PFUN newfun = (PFUN)::GetProcAddress(hMole,"testFn");
i = newfun(a,b);
::FreeLibrary(hMole);
*/
i=a+b;
return i;
}

JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr(JNIEnv *, jobject)
{
int i=0;
return i;
}d、点击“运行”->“编译”,这时你会看到很多数据类型没被声明的错误,那是因为util_InvokeDll.h使用了很多JAVA_HOME/include/jni.h文件自定义的数据类型,而jni.h又引
用了JAVA_HOME/include/win32/jni_md.h,这时你需要把jni.h和jni_md.h引入到工程里面来,左击工程名“工程属性”->“文件/目录”->“包含文件目录”把JAVA_HOME/include和JAVA_HOME/include/win32文件夹添加,确定后,再次编译一切正常,这时在工程的目录下就找到java2dll.dll文件,这样dll文件就生成了
4、调用其他标准的C++动态库,如test.dll

例如test.dll,是其他人编写的标准的C++动态库,可以在上述注释掉的部分调用,testFn是它里面的函数。

5、在webservice端的java调用

加载库Java2dll,并调用接口函数:

[cpp] view plainprint?
01.static
02.{
03. //动态库dll文件要放到系统目录或用绝对路径凋用System.load("绝对路径")
04. System.loadLibrary("Java2dll");
05.}
06.
07./实例化调用类
08.InvokeDll dll = new InvokeDll();
09.
10.//调用函数
11.String strRet = dll.testFunc(a, b)
static
{
//动态库dll文件要放到系统目录或用绝对路径凋用System.load("绝对路径")
System.loadLibrary("Java2dll");
}

//实例化调用类
InvokeDll dll = new InvokeDll();

//调用函数
String strRet = dll.testFunc(a, b)


总结:调用过程:java普通类-->java native类-->jni C++ 动态库-->标准C++动态库,最终实现java普通类对标准C++动态库的调用。

热点内容
2010word加密方法 发布:2024-09-17 04:17:36 浏览:281
crv哪个配置性价比高2021 发布:2024-09-17 04:07:51 浏览:35
wincc图形编译在哪里 发布:2024-09-17 03:58:26 浏览:977
androidubuntu 发布:2024-09-17 03:50:27 浏览:701
识梦源码 发布:2024-09-17 03:50:18 浏览:26
诺基亚密码忘了打什么电话 发布:2024-09-17 03:27:09 浏览:555
树深度优先算法 发布:2024-09-17 03:26:58 浏览:472
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:785
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726