您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Android中使用HTTP服务
Android中使用HTTP服务在Android中,除了使用java.net包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作。AndroidSDK附带了Apache的HttpClientAPI。ApacheHttpClient是一个完善的HTTP客户端,它提供了对HTTP协议的全面支持,可以使用HTTPGET和POST进行访问。下面我们就结合实例,介绍一下HttpClient的使用方法。我们新建一个http项目,项目结构如图:在这个项目中,我们不需要任何的Activity,所有的操作都在单元测试类HttpTest.java中完成。因为使用到了单元测试,所以在这里先介绍一下如何配置Android中的单元测试。所有配置信息均在AndroidManifest.xml中完成:[xhtml]viewplaincopyprint?1.?xmlversion=1.0encoding=utf-8?2.manifestxmlns:android==com.scott.http4.android:versionCode=15.android:versionName=1.06.applicationandroid:icon=@drawable/iconandroid:label=@string/app_name7.!--配置测试要使用的类库--8.uses-libraryandroid:name=android.test.runner/9./application10.!--配置测试设备的主类和目标包--11.instrumentationandroid:name=android.test.InstrumentationTestRunner12.android:targetPackage=com.scott.http/13.!--访问HTTP服务所需的网络权限--14.uses-permissionandroid:name=android.permission.INTERNET/15.uses-sdkandroid:minSdkVersion=8/16./manifest?xmlversion=1.0encoding=utf-8?manifestxmlns:android==com.scott.httpandroid:versionCode=1android:versionName=1.0applicationandroid:icon=@drawable/iconandroid:label=@string/app_name!--配置测试要使用的类库--uses-libraryandroid:name=android.test.runner//application!--配置测试设备的主类和目标包--instrumentationandroid:name=android.test.InstrumentationTestRunnerandroid:targetPackage=com.scott.http/!--访问HTTP服务所需的网络权限--uses-permissionandroid:name=android.permission.INTERNET/uses-sdkandroid:minSdkVersion=8//manifest然后,我们的单元测试类需要继承android.test.AndroidTestCase类,这个类本身是继承junit.framework.TestCase,并提供了getContext()方法,用于获取Android上下文环境,这个设计非常有用,因为很多AndroidAPI都是需要Context才能完成的。现在让我们来看一下我们的测试用例,HttpTest.java代码如下:[java]viewplaincopyprint?1.packagecom.scot.http.test;2.3.importjava.io.ByteArrayOutputStream;4.importjava.io.InputStream;5.importjava.util.ArrayList;6.importjava.util.List;7.8.importjunit.framework.Assert;9.10.importorg.apache.http.HttpEntity;11.importorg.apache.http.HttpResponse;12.importorg.apache.http.HttpStatus;13.importorg.apache.http.NameValuePair;14.importorg.apache.http.client.HttpClient;15.importorg.apache.http.client.entity.UrlEncodedFormEntity;16.importorg.apache.http.client.methods.HttpGet;17.importorg.apache.http.client.methods.HttpPost;18.importorg.apache.http.entity.mime.MultipartEntity;19.importorg.apache.http.entity.mime.content.InputStreamBody;20.importorg.apache.http.entity.mime.content.StringBody;21.importorg.apache.http.impl.client.DefaultHttpClient;22.importorg.apache.http.message.BasicNameValuePair;23.24.importandroid.test.AndroidTestCase;25.26.publicclassHttpTestextendsAndroidTestCase{27.28.privatestaticfinalStringPATH=()throwsException{31.HttpClientclient=newDefaultHttpClient();32.HttpGetget=newHttpGet(PATH+/TestServlet?id=1001&name=john&age=60);33.HttpResponseresponse=client.execute(get);34.if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){35.InputStreamis=response.getEntity().getContent();36.Stringresult=inStream2String(is);37.Assert.assertEquals(result,GET_SUCCESS);38.}39.}40.41.publicvoidtestPost()throwsException{42.HttpClientclient=newDefaultHttpClient();43.HttpPostpost=newHttpPost(PATH+/TestServlet);44.ListNameValuePairparams=newArrayListNameValuePair();45.params.add(newBasicNameValuePair(id,1001));46.params.add(newBasicNameValuePair(name,john));47.params.add(newBasicNameValuePair(age,60));48.HttpEntityformEntity=newUrlEncodedFormEntity(params);49.post.setEntity(formEntity);50.HttpResponseresponse=client.execute(post);51.if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){52.InputStreamis=response.getEntity().getContent();53.Stringresult=inStream2String(is);54.Assert.assertEquals(result,POST_SUCCESS);55.}56.}57.58.publicvoidtestUpload()throwsException{59.InputStreamis=getContext().getAssets().open(books.xml);60.HttpClientclient=newDefaultHttpClient();61.HttpPostpost=newHttpPost(PATH+/UploadServlet);62.InputStreamBodyisb=newInputStreamBody(is,books.xml);63.MultipartEntitymultipartEntity=newMultipartEntity();64.multipartEntity.addPart(file,isb);65.multipartEntity.addPart(desc,newStringBody(thisisdescription.));66.post.setEntity(multipartEntity);67.HttpResponseresponse=client.execute(post);68.if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){69.is=response.getEntity().getContent();70.Stringresult=inStream2String(is);71.Assert.assertEquals(result,UPLOAD_SUCCESS);72.}73.}74.75.//将输入流转换成字符串76.privateStringinStream2String(InputStreamis)throwsException{77.ByteArrayOutputStreambaos=newByteArrayOutputStream();78.byte[]buf=newbyte[1024];79.intlen=-1;80.while((len=is.read(buf))!=-1){81.baos.write(buf,0,len);82.}83.returnnewString(baos.toByteArray());84.}85.}packagecom.scot.http.test;importjava.io.ByteArrayOutputStream;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importjunit.framework.Assert;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.
本文标题:Android中使用HTTP服务
链接地址:https://www.777doc.com/doc-3166032 .html