首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Android+REST WebService服务模式手机开发

2012-09-05 
Android+REST WebService服务方式手机开发??? 最近项目中采用Apache CXF 的REST?方式发布WebService实现,A

Android+REST WebService服务方式手机开发

??? 最近项目中采用Apache CXF 的REST?方式发布WebService实现,Android手机后台服务的开发,以下以简单是实例实现。

在项目中采用Android+REST WebService服务方式开发的手机平台很少采用?soap协议这种方式,主要soap协议解析问题,增加了代码量。? 采用RESTFull 方式开发WebService的好处,相对SOAP协议的WebService来说,比较简单。同时简化了在手机解析工作,减轻了手机端的压力,提高了手机响应的效率。

?

手机后台服务:

?

?

手机前台服务:

package com.easyway.rest.ws;import java.io.IOException;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import android.app.Activity;import android.os.Bundle;import android.os.StrictMode;import android.widget.TextView;/** * Android平台主要提供了四种数据存储方式:Shared Preferences、文件存储、Sqlite存储和网络存储。其中:      1)Shared Preferences 一个轻量级的键-值存储机制,专门用于存储键-值对数据,并且仅可以存储基本的数据类型                        (boolean、int、long、float和String);通常使用它来存储应用程序的配置信息。      2)文件存储 通过FileInputStream和FileOutputStream对文件进行操作,在Android中,文件是一个应用程序私有的,       一个应用程序无法读写其它应用程序的文件。      3)SQLite存储 SQLite是一款轻型的数据库,支持标准SQL。它的设计目标是嵌入式的,占用资源非常的低,在嵌入式设备中,          只需要几百K的内存就够了。Android平台也为我们提供了SQLite数据库。      4)网络存储 以上3种方式数据均存储在手机上,而网络存储的数据是存储在远程服务器上,手机客户端通过联接到网络来存储和获取数据。      今天要讲解的HttpClient正是常用的网络存储工具之一。记得最早接触HttpClient是在两年前,当时要做一个垂直搜索引擎,      数据自然是来源于互联网,通过一个爬虫系统不断从指定网站上爬取感兴趣的数据,然后通过Lucene搜索引擎框架实现海量数据      的快速检索。而爬虫系统最开始是想采用开源的爬虫框架Heritrix来实现,但接触一段时间后发现Heritrix过于庞大,而且是作      为一个独立的系统运行,不方便嵌入到现有的系统中,再加上学习成本高,最后还是选择了“HttpClient + HtmlParser”来实现的      小型爬虫系统;其中HttpClient可以模拟HTTP的POST和GET请求,用于从指定网站获取网页数据,而HtmlParser用于解析爬取到      的页面,过滤HTML标记,取得最终数据。      是不是发现HttpClient还挺强大的?让我们看看它是什么来头。"HttpClient 是 Apache Jakarta Common 下的子项目,可以用来      提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议"。如果你以前没      有接触过HttpClient,那么你只需要简单记住两点就可以了:          1)HttpClient是一个HTTP协议开发包;          2)HttpClient不是Android的专利。      HttpClient的功能介绍:            1)实现了HTTP请求的所有方法(如GET、POST、PUT、HEAD 等);            2)支持自动转向;            3)支持 HTTPS 协议;            4)支持代理服务器等      HttpClient的基本使用(以POST请求为例):            1)创建HttpClient实例(类似于浏览器客户端);                        HttpClient client = new DefaultHttpClient();            2)创建HttpPost请求,需要向HttpPost的构造方法传入所请求的URL;                        HttpPost post = new HttpPost(requestUrl);            3)发出POST请求(调用HttpClient的execute()方法,execute()的参数为HttpPost实例);                        HttpResponse response = client.execute(post);            4)读取返回结果;            5)释放连接;            6)对返回的结果进行处理。      在Android平台上使用HttpClient,并不需要添加额外的jar包,因为Android平台吸收了许多优秀的开源框架,其中就包括HttpClient,      下面就来看一个Android平台使用HttpClient的例子。备注:是不是发现HttpClient很容易使用呢?其实,上面所讲解的只是HttpClient最基本的功能(发起POST请求);我们在浏览器客户端所执行的大多数操作HttpClient都能够模拟,例如:提交表单、查询数据、上传下载文档、页面跳转、Session存储等。比如大家经常玩“抢车位”、“偷菜”,就可以通过HttpClient编程自动实现。 *  *  * 客户端通过Apache HttpClient调用JAXRS WebService的服务。 * 为 Android 开发访问 JAX-RS Web 服务的 Apache HttpClient 客户端. *  * 备注:在访问本机的JAXRS Web服务的时候不能使用localhost或者127.0.0.1, *    因为android模拟机会调用自身的linux内核操作系统,所以可能找不到相关的服务。 *    最好填写ip地址如下: *       "http://192.168.134.1:8080/JAXRSWebService/services/helloworld"; * * @author longgangbai * */public class AndroidJAXRSWebServiceActivity extends Activity {    private static final String processURL="http://192.168.134.1:8080/JAXRSWebService/services/helloworld";private TextView txResult;    /**     *  Called when the activity is first created.     */    @Override    public void onCreate(Bundle savedInstanceState) {    ///在Android2.2以后必须添加以下代码//本应用采用的Android4.0//设置线程的策略 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()            .detectDiskReads()            .detectDiskWrites()            .detectNetwork()   // or .detectAll() for all detectable problems            .penaltyLog()            .build());   //设置虚拟机的策略  StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()            .detectLeakedSqlLiteObjects()            //.detectLeakedClosableObjects()            .penaltyLog()            .penaltyDeath()            .build());        super.onCreate(savedInstanceState);        //设置UI布局        setContentView(R.layout.main);        //获取结果显示文本框        txResult=(TextView)findViewById(R.id.tvresult);        //获取JAXRS WebService的结果信息        getJAXRSWebService();    }        /**     * 获取JAXRS WebService的结果信息     */    public void getJAXRSWebService(){     try {    //创建一个HttpClient对象    HttpClient httpclient = new DefaultHttpClient();        //创建HttpGet对象    HttpGet request=new HttpGet(processURL);    //请求信息类型MIME每种响应类型的输出(普通文本、html 和 XML)。允许的响应类型应当匹配资源类中生成的 MIME 类型    //资源类生成的 MIME 类型应当匹配一种可接受的 MIME 类型。如果生成的 MIME 类型和可接受的 MIME 类型不 匹配,那么将    //生成 com.sun.jersey.api.client.UniformInterfaceException。例如,将可接受的 MIME 类型设置为 text/xml,而将    //生成的 MIME 类型设置为 application/xml。将生成 UniformInterfaceException。    request.addHeader("Accept","text/plain");        //获取响应的结果HttpResponse response =httpclient.execute(request);//获取HttpEntityHttpEntity entity=response.getEntity();//获取响应的结果信息String result =EntityUtils.toString(entity); txResult.setText(result);     } catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}    }}

?

?

?

?

1 楼 zjc198805 2012-04-26   lz,假如android端有图片需要提交,服务器端该怎么实现呢?用rest风格的webservice 2 楼 longgangbai 2012-04-28   zjc198805 写道lz,假如android端有图片需要提交,服务器端该怎么实现呢?用rest风格的webservice
采用Servlet实现即可,我们采用Servlet实现。 3 楼 gqs_Android 2012-07-04   longgangbai 写道zjc198805 写道lz,假如android端有图片需要提交,服务器端该怎么实现呢?用rest风格的webservice
采用Servlet实现即可,我们采用Servlet实现。
发送字节流不就可以吗 4 楼 longgangbai 2012-07-04   gqs_Android 写道longgangbai 写道zjc198805 写道lz,假如android端有图片需要提交,服务器端该怎么实现呢?用rest风格的webservice
采用Servlet实现即可,我们采用Servlet实现。
发送字节流不就可以吗
如果你发送类似图片base64格式的字符串也是可以的,随便都可以。只是一种方案而已。 5 楼 longgangbai 2012-07-04   gqs_Android 写道longgangbai 写道zjc198805 写道lz,假如android端有图片需要提交,服务器端该怎么实现呢?用rest风格的webservice
采用Servlet实现即可,我们采用Servlet实现。
发送字节流不就可以吗
base64图片格式请查看一下目录:
http://topmanopensource.iteye.com/blog/1544126

热点排行