12.2 HTTP请求
如果不通过HTTP访问,那么Web服务不会是一个”Web“服务。在Android上生成一个HTTP请求非常的简单,可以使用Apache提供的HttpClient类,他们包含在Android的org.apache.http程序包中。
首先需要创建HttpClient对象,它实际上是一个DefaultHttpClient对象。
1 HttpClient httpclient=new DefaultHttpClient();
随后就可以构造请求。在当前情况下会生成一个GTTP GET请求,它以查询字符串的形式将任何参数放到URL中。这与HTTP POST请求相反,其发送额外的数据作为请求消息的主体,而不是作为URL的一部分。
为了创建一个GTTP GET请求,需要实例化一个HttpGet对象,并传入想要检索的页面的URL。在当前情况下是传入一个URL,指向Apress站点上关于这本书的页面。
1 HttpGet httpget=new HttpGet("http://www.apress.com/book/view/9781430232674");
随后调用execute方法,将HttpGet对象传递给HttpClient对象以执行该请求。这将返回一个HttpResponse对象。
1 HttpResponse response=httpclient.execute(httpget);
HttpResponse将包含一个HttpEntity对象,其本质上是一条HTTP消息。请求和响应都包含实体。
1 HttpEntity entity=response.getEntity();
HttpEntity上的getContent方法将返回一个InputStream,可以使用它来读取在响应中实际发送的内容。
1 InputStream inputstream=entity.getContent();
接下来通过一个简短的示例进行说明。
1 package com.nthm.androidtestActivity; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import org.apache.http.HttpEntity; 8 import org.apache.http.HttpResponse; 9 import org.apache.http.client.HttpClient;10 import org.apache.http.client.methods.HttpGet;11 import org.apache.http.impl.client.DefaultHttpClient;12 import com.nthm.androidtest.R;13 import android.app.Activity;14 import android.os.Bundle;15 import android.util.Log;16 17 public class SimpleHTTPRequest extends Activity {18 19 @Override20 protected void onCreate(Bundle savedInstanceState) {21 super.onCreate(savedInstanceState);22 setContentView(R.layout.main);
首先将实例化HttpClient对象和HttpGet对象。
1 HttpClient httpclient=new DefaultHttpClient();2 HttpGet httpget=new HttpGet("http://www.apress.com/book/view/9781430232674");
由于HttpClient上的execute方法可能会抛出异常,因此需要将它包装在try/catch块中。
1 try{2 HttpResponse response=httpclient.execute(httpget);3 HttpEntity entity=response.getEntity();4 if(entity!=null){
如果存在HttpEntity,那么访问InputStream以读取响应。
1 InputStream inputstream=entity.getContent();
在InputStream封装在一个BufferedReader中,并利用一个StringBuilder对象来将它变成一个正常的字符串,从而在最后使用它。
1 BufferedReader bufferedreader=new BufferedReader(new InputStreamReader(inputstream)); 2 StringBuilder stringbuilder=new StringBuilder(); 3 String currentline=null; 4 try{ 5 while((currentline=bufferedreader.readLine())!=null){ 6 stringbuilder.append(currentline+"\n"); 7 } 8 }catch(IOException e){ 9 e.printStackTrace();10 }
在完全读取其内容之后,使用StringBuilder对象上的toString方法获取结果字符串,然后调用Log方法将它打印出来。
1 String result=stringbuilder.toString();2 Log.i("SimpleHTTPRequest", result);3 inputstream.close();4 }5 }catch(Exception e){6 e.printStackTrace();7 }8 }9 }
当然,必须有访问Internet的权限,因此需要在AndroidManifest.xml中指定它
1 <uses-permission android:name="android.permission.INTERNE
既然已经知道如何为一个通用的Web资源生成HTTP请求,现在就让我们看看在请求一个Web服务之后如何处理可能返回的数据类型。接下来将以JSON格式的数据作为开始。
更多相关文章
- Android应用数据存储几种方式(2)
- Android——使用ContentProvider在应用间传递数据
- android 8.0 报错StartForeground Bad Notification Error 解决
- Android(安卓)fragment 重叠问题,闪退后fragment重叠bug解决方法
- Android入门笔记 - 网络通信 - HttpClient
- Android(安卓)应用程序退出的四种方法
- 查看Android系统内存使用的方法
- Android获取屏幕或View宽度和高度的方法
- Android的Drawable和Bitmap之间相关转换