在android 访问 移动互联网 的方式一般我们用Http的请求方式, Http 进行网络通信中有两种方式: 一种是使用HttpUrLConnection实现,另一种使用HttpClient。下面就分别来介绍这两种Http的请求方式:
再说Http前,要注意的是对于访问网络操作之前一定要做的就是,在AndroidManifest.xml文件中指定允许访问网络资源的权限:
<span style="font-size:18px;color:#ff0000;"><uses-permission android:name="android.permission.INTERNET" /></span>
使用HttpURLConnection访问网络:
HttpURLConnection类位于java.net包中,用于发送Http请求和获取 Http响应。由于该类是抽象类, 不能直接实例化对象,则需要使用URL的openConnection()方法来获得。列如,要创建http://www.mingribook.com网站对应的HttpURLConnection对象,可以使用以下代码:
URL url = new URL("http://www.mingribook.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
HttpURLConnection 创建后,就可以使用该对象发送HTTP请求了,HTTP请求通常分为GET和POST两种方式。下面分别进行介绍:
1. 发送GET请求:
使用HttpURLConnection 对象发送请求时,默认发送的就是GET请求。因此,发送GET请求比较简单,只需要指定链接地址时,先将传递的参数通过“?参数名 = 参数值&参数名 = 参数值” 或 “?参数名 = 参数值,参数名 = 参数值” ,追加到请求的链接的后面就可以了. 下面通过一个具体的实例来说明如何使用HttpURLConnection的Get请求方式:
<span style="white-space:pre"> </span>String name = "keyang";
<span style="white-space:pre"> </span>//要访问的URL地址
try {
URL url = new URL(target); //创建URL对象
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); //创建一个HTTP连接对象
urlConn.connect(); //连接服务器
if(urlConn.getResponseCode() == HttpURLConnection.HTTP_OK){ // 比较响应码是否为正常响应
InputStreamReader in = new InputStreamReader(urlConn.getInputStream()); //获取服务器的响应流
BufferedReader br = new BufferedReader(in); //读取服务器的响应流
String inputLen = "";
while((inputLen = br.readLine())!=null){
Log.i("Test",inputLen);
}
in.close(); //关闭输入流
urlConn.disconnect(); //断开与服务器的连接
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2. 发送POST请求
由于采用GET方式发送请求只适合发送大小在1024个字节以内的数据,所以当要发送的数据较大时,就需要使用POST方式来发送请求。在Android 中,使用HttpURLConnection 类发送请求时,默认采用的是GET请求,如果发送POST请求,需要通过其 setRequestMethod()方法进行指定。例如,创建一个HTTP连接,并为该连接指定请求的发送方式为POST, 可以使用下面的代码:
<span style="white-space:pre"> </span>URL url = new URL("http://www.baidu.com");
HttpURLConnection urlConn = url.openConnection();
urlConn.setRequestMethod("POST"); //其参数值 的GET和POST一定是要大写
发送POST请求比发送GET 请求要复杂一些,它经常需要通过HttpURLConnection的类及其父类URLConnection提供的方法进行设置相关的类容,下面就是发送POST请求时常用的方法:
setDoInput(boolean newValue)
用于设置是否向连接中写入数据,如果参数值为true,表示写入数据;否则不写入数据;
setDoOutput(boolean newValue)
用于设置是否从连接中读取数据, 如果参数值为true ,表示读取数据;否则不读取数据;
setUseCaches(boolean newValue)
用于设置是否缓存数据,如果参数值为true,表示缓存数据;否则表示禁用缓存;
setInstanceFollowRedirects(booleran followRedirects)
用于设置是否应该自动执行HTTP重定向,参数值为true时,表示自动执行;否则不自动执行;
setRequestProperty(String field,String newValue)
用于设置一般请求属性,例如,要设置内容类型为表单数据,可以进行一下设置setRequestProperty("Content-Type","application/x-www-form-urlencoded");
下面通过一个实例来介绍如何使用HttpURLConnection类发送POST请求 :
String target = "http://192.168.1.66:8081/blog/index.jsp";
try {
URL url = new URL(target); //获取URL对象
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); //创建一个HTTP连接
urlConn.setRequestMethod("POST"); //指定HTTP 使用POST的请求方式
urlConn.setUseCaches(false); // 禁止缓存
urlConn.setDoInput(true); //向连接中写入数据
urlConn.setDoOutput(true); //从连接中读取数据
urlConn.setInstanceFollowRedirects(true); //自动执行HTTP重定向
urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded" ); //设置内容类型
DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());//获取输出流
String param = "nickname="+URLEncoder.encode("keyang","utf-8")+"&content="+
URLEncoder.encode("你有未接电话","utf-8"); //连接要提交的数据
out.writeBytes(param); //将要传递的数据写入数据输出流
out.flush(); //输出缓存
out.close(); // 关闭数据输出流
//判断是否响应成功
if(urlConn.getResponseCode() == HttpURLConnection.HTTP_OK){
InputStreamReader in = new InputStreamReader(urlConn.getInputStream()); //获得读取的内容
BufferedReader buffer = new BufferedReader(in); //获取输入流对象
String inputLine = null;
while( (inputLine = buffer.readLine()) != null){
Log.i("Test",inputLine);
}
in.close(); //关闭字符输入流
}
urlConn.disconnect();//关闭与服务器的连接
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使用HttpClient访问网络:
HttpClient 是Apache组织提供的,在Android中,已经成功的集成了HttpClient,所以可以直接在Android中使用HttpClient来访问网络。HttpClient实际上是对java提供的访问网络的方法进行了封装.HttpURLConnectionlei 中的输入/输出流操作,在HttpClient中被统一封装成了HttpGet,HttpPost 和 HttpResponse类,这样,就简化了操作。其中,HttpGet类代表发送GET请求;HttpPost类代表发送POST请求;HttpResponse类代表处理响应对象。
同使用HttpURLConnection类一样,使用HttpClient发送HTTP请求也可以分为发送GET请求和POST请求两种,下面分别进行介绍.
1. 发送GET请求
同HttpURLConnection类一样,使用HttpClient 发送GET请求的方法也比较简单,大致可以分为以下几个步骤。
(1) 创建HttpClient对象.
(2) 创建HttpGet对象
(3)如果需要发送请求参数,可以直接将要发送的参数连接到URL地址中,也可以调用HttpGet的setParams()方法来添加请求参数。
(4)调用HttpClient 对象的execute()方法发送请求。执行该方法将放回一个HttpResponse对象.
(5)调用HttpResponse 的getEntity()方法,可获得包含服务器响应内容的HttpEntity对象,通过该对象可以获取服务器的响应内容。
下面通过一个具体的实例来说明如何使用HttpClient来发送GET请求:
<span style="white-space:pre"> </span>String target = "http://192.168.1.66:8081/blog/index.jsp?parm=get";
String result = "";//服务器响应的信息
try {
URL url = new URL(target); //获取URL对象
HttpClient httpclient = new DefaultHttpClient(); //创建HttpClient对象
HttpGet httpRequest = new HttpGet(target); // 创建HttpGet链接对象
HttpResponse httpResponse = httpclient.execute(httpRequest); //执行HttpClient请求
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
result = EntityUtils.toString(httpResponse.getEntity()); //获取服务器返回的字符串
}else{
result = "请求失败";
}
}catch(Exception e){
e.printStackTrace();
}
2.发送POST请求
同HttpURLConnection类一样,使用HttpClient 发送GET请求的方法也比较简单,大致可以分为以下几个步骤。
(1) 创建HttpClient对象.
(2) 创建HttpPost对象
(3)如果需要发送请求参数,可以调用HttpPost的setParams()方法来添加请求参数,也可以调用setEntity()方法来设置请求参数。
(4)调用HttpClient 对象的execute()方法发送请求。执行该方法将放回一个HttpResponse对象.
(5)调用HttpResponse 的getEntity()方法,可获得包含服务器响应内容的HttpEntity对象,通过该对象可以获取服务器的响应内容。
下面通过一个具体的实例来说明如何使用HttpClient来发送POST请求:
String target = "http://192.168.1.66:8081/blog/index.jsp";
String result = "";//服务器响应的信息
try {
URL url = new URL(target); //获取URL对象
HttpClient httpclient = new DefaultHttpClient(); //创建HttpClient对象
HttpPost httpRequest = new HttpPost(target); // 创建HttpPost链接对象
//将要传递的参数保存到List集合中
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("param", "post")); //标记参数
params.add(new BasicNameValuePair("nickname","keyang")); //昵称
params.add(new BasicNameValuePair("content","你有未接电话")); //内容
httpRequest.setEntity(new UrlEncodedFormEntity(params,"utf-8")); //设置编码方式
HttpResponse httpResponse = httpclient.execute(httpRequest); //执行HttpClient请求
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
result = EntityUtils.toString(httpResponse.getEntity()); //获取服务器返回的字符串
}else{
result = "请求失败";
}
}catch(Exception e){
e.printStackTrace();
}
以上只是对Android 中网络访问 HTTP请求,简述的比较基础,相信HTTP还有很多要看,建议新手在看懂本片文章后,在去看一些稍微讲的有深度的文章,这将会对你有很大的帮助.