Android Http访问网络
来源:互联网 发布:数据采集器作用 编辑:程序博客网 时间:2024/05/18 06:19
在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 blocke.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 blocke.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还有很多要看,建议新手在看懂本片文章后,在去看一些稍微讲的有深度的文章,这将会对你有很大的帮助.
- Android Http访问网络
- Android Http协议访问网络
- Android - HTTP 协议访问网络
- Android:HTTP协议访问网络
- Android使用Http访问网络
- Android开发之HTTP访问网络
- Android学习使用HTTP协议访问网络
- android之网络访问http请求总结
- Android之使用HTTP协议访问网络
- Android使用HTTP协议访问网络
- Android使用Http协议访问网络
- Android使用Http协议访问网络
- Android入门-使用Http协议访问网络
- Android之使用HTTP协议访问网络
- Android—使用Http协议访问网络
- android复习路之http网络访问
- android中使用http协议访问网络
- Android使用http协议访问网络
- 在树莓派上安装OpenCV视觉库
- DNA分子结构3D模型
- 由Oracle的V$SESSION中的MACHINE字段想到的
- 【.NET特供-第三季】ASP.NET MVC系列:传统WebForm网站和MVC网站运行机制对比
- 深入java虚拟机(六)——类加载的父亲委托机制
- Android Http访问网络
- 【UVA】12504 - Updating a Dictionary(map,string,vector模拟)
- <位操作>short、char及位操作<<
- 创建JSONArray
- 深入java虚拟机(七)深入源码看java类加载器ClassLoader
- 图片剪裁并上传
- [外语] push the envelope 挑战极限
- hdu-1276-士兵队列训练问题
- Log分析 你还可以去data/anr的目录下把trace.txt这个文件拷贝出来,在该文件中会写了产生anr的函数堆栈可以帮助分析