Android网络编程

使用HttpURLConnection从网络上获取数据

1.      在mainfest.xml中添加网络访问权限,代码如下:

	<uses-permission android:name="android.permission.INTERNET"/>"

2.      给定一个数据url,通过该URL得到一个Http链接,再通过链接获得输入流,读取该网站的数据。核心代码如下:

URL url=new URL(urlstring);
URLConnecion conn=url.openConnecion();//打开连接
if((conn instanceof HttpURLConnecion)){
throw new IOException("Not an HTTP Connecion");
}
HttpURLConnecion httpConn=(HttpURLConnection)conn;
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequstMethod("GET");
httpConn.connect();
int response=httConn.getResponseCode();
if(response==HttpURLConnection.HTTP_OK){
in=httpConn.getInputStream();
}

3.      通过得到的输入流,来获取数据。如果想获得字符数据,则将该输入流封装成字符输入流。如果想得到图片,则可以封装成位图。代码如下:

得到位图

bitmap=BitmapFactory.decodeStream(in);
转为字符输入流的方法和java的方式一样

因为从网络上下载数据属于耗时操作,应该另开一个线程来处理此任务,而通常我们使用AsyncTask来处理。在doInBackground(string …urls)方法中获得位图,在onPostExcute(Bitmapbitmap)中更新UI。

使用HttpClient来从网络上获取数据

HttpClient是Apache的一个开源项目,弥补了上述方法(通过HttpURLConnection建立连接)灵活性不足的特点,为客户端基于Http协议的编程提供了高效、功能丰富的工具包的支持。Android SDK引入了HttpClient之后,对其作了一些扩展和封装,例如设置默认的Http超时时间以及缓存大小等。HttpClient的一般使用步骤如下:

1.      使用DefaultHttpClient类实例化HttpClient对象。

2.      创建HttpGet或者是HttpPost对象,将要请求的URL通过构造方法传入HttpGet和HttpPost对象。

3.      调用excute方法发送Http  Get(获取资源)或者Http  Post(提交表单)请求,并返回HttpResponse对象。具体代码如下:

httpGet的使用方法:

HttpClient client=new DefaultHttpClient();
HttpGet request=new HttpGet(url);
HttpResponse response=client.excute(request);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{
InputStream in=response.getEntity().getContent();
}
httpPost的使用方法:
HttpClient client=new DefaultHttpClient();
HttpPost request=new HttpPost(url);
//准备表单,表单项是一个NameValuePair
List<NameValuePair> postParameters=new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("id","123456"));
postParameters.add(new BasicNameValuePair("name","mike"));
UrlEncodedFormEntity formEntity=new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response=client.excute(request);

使用Android Tcp Socket来进行设备之间的通信

上面两种方法都是对网络数据进行请求,并没有解决设备间的通信问题。Socket是用来描述网络上一个设备中的一个进程或应用程序的,有ip地址和端口号组成。通常情况下,socket通信有两部分,一部分为监听的server端,另一部分为主动发起请求的Client端。Server端在绑定端口号后会一直监听直到接受到连接请求为止,当Client端通过制定主机号和端口号发起请求时,Server端就会给与应答并返回一个Socket对象。之后,Server端就可以和Client端通过这个Socket来进行通信。

Server端核心代码:

ServerSocket server=new ServerSocket(18888);//绑定端口号,开始监听客户端请求
while(true){//循环监听客户端的连接请求
socket=server.accept();//接受客户端请求,返回一个socket对象
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();
in.close();//当前客户端不需要再进行连接
out.close();
}
Client端核心代码:
Socket socket=new Socket("192.168.1.1",18888);//请求建立连接
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值