转载请标明出处:
http://blog.csdn.net/yujun411522/article/details/46226107
本文出自:【yujun411522的博客】
先介绍android中网络访问
11.1 android 网络访问
涉及到的几个问题:
1.android平台访问网络的API接口
a.java.net*(标准java接口):流、socket、http处理、URLConnection等。j2se网络编程中很常用。
b.Org.apache :这是apache android推展的接口,提供更多更全的功能,常用的是HttpClient
c.android.net*:进行android特有的网络编程,访问wifi
2.服务器返回给客户端的几种内容形式
a html页面,内置的webkit可以很容易的解析html代码
b xml/json字符串,用于查询和展示,如查询中国多少省份,天气情况等都可以使用xml或者json的方式传递
3.android 中的网络访问可以大致分为两种:一种是基于http、一种是基于socket。
11.1.1 socket通信
这一部分和j2se中基本没有区别:ServerSocket和Socket
这里只做一个简单的流程,因为网络编程这一块很复杂,还涉及到多线程编程。
先看服务器端:
ServerSocket server = newServerSocket(8888);
//accept阻塞执行,也就是如果没有连接到server就一直停止在这里
socket socket = server.accept();
之后得到socket的inputstream和outputstream,分别可以读取client端发送数据以及发送给client数据。这些读写操作有可能会阻塞,所以有必要进行多线程编程操作。
再看client:
Socket socket = new Socket(hostName,8888);
同样取inputstream和outputstream来与server进行通信。
11.1.2 http通信
这一部分开发中使用的更多,大部分都是使用http请求数据,android中主要有两种方式来进行http请求:HttpURLConnection和HttpClient。先看HttpURLConnection,它的操作也和j2se中一样。
HttpURLConnection 继承URLConnection,所以很多方法都是继承URLConnection
常用方法:setReadTimeout、setConnectTimeous、setRequestMethod、setDoInput、setDoOutput等方法。
常用的http请求方式有GET、POST。简要介绍:
1 get是将表单参数追加到action属性所指向的URL中,在URL可以看见。而post则是将表单参数放置在header中,在浏览器中无法看到。
2 关于数据流大小:get的限制是来自浏览器的限制,而post理论上不受限制。
分别使用HttpURLConnection和HttpClient进行get、post请求。
1 使用HttpURLConnection get方式请求http数据:
URL url = new URL("http://www.baidu.com?name=yujun");//这里只是做个测试
HttpURLConnection con = (HttpURLConnection)url.openConnection();
//con设置各种属性
con.setRequestMethod("GET");
//连接
con.connec();
//返回状态码
int response = con.getResponseCode();
//读取数据
InputStream in = con.getInputStream()
//操作流和java中的操作一样,不再赘述
2 使用
HttpURLConnection post
方式请求http数据:
URL url = new URL("http://www.baidu.com?name=yujun");//这里只是做个测试
HttpURLConnection con = (HttpURLConnection)url.openConnection();
//con设置各种属性
con.setRequestMethod("POST");
//连接
con.connec();
//返回状态码
int response = con.getResponseCode();
//向out里面写收据,一般是上传文件等操作。
OutputStream out = con.getOutputStream();
//写完之后如果有需要可以读取服务器端响应。
//读取数据
InputStream in = con.getInputStream()
//操作流和java中的操作一样,不再赘述
3 使用
HttClient get
方式请求http数据:
HttpClient client= newDefaultHttpClient();
HttpGet get = new HttpGet("http://www.baidu.com");
HttpResponse response = client.execute(get);
InputStream in = response.getEntity().getContent
//读写流
4 使用
HttClient Post
方式请求http数据:
HttpClient client= newDefaultHttpClient();
HttpPost post = new HttpPost("http://www.baidu.com");
//设置httpEntity
List<NameValuePair> para = new ArrayList<NameValuePair>();
para.add(new BasicNameValuePair("name","yujun"));
HttpEntity entity = new UrlEncodedFormEntity(para);
post.setEntity(entity );
HttpResponse response = client.execute(post);
InputStream in = response.getEntity().getContent
//读写流
如何实现上传文件功能(后续更新)
HttpURLConnection和HttpClient怎么选择?
android 2.2之前的版本中httpClient出现的bug更少,推荐使用
2.3以及以后的版本中HttURLConnection则是最佳的选择,api简单,速度快,使用压缩和缓存机制减少网络流量,效率更高
11.1 android http怎么加入超时和代理(后续更新)