android学习笔记7 - 连接服务器操作和数据处理(get+service)

android连接服务器的操作可以使get和post,这里试着使用一下get的方式(post使用Httppost),同时在主活动中调用service的方式进行异步连接服务器(也可以使用thread方法)。


get连接的方式:
1.建立url对象 
2.建立HttpURLConnect对象
3.设置get方法 

4.保存通过 connect获得的InputStream数据流

public static String httpget(String urlstring) throws IOException
	{
		URL url=new URL(urlstring);
		HttpURLConnection connect=(HttpURLConnection) url.openConnection();
		connect.setRequestMethod("GET");
		InputStream instream=connect.getInputStream();
		byte[] data=readstream(instream);
	    String result=new String(data,"GBK");
	    return result;
	}



数据处理:读取InputStream流中的数据返回byte数组 

1.建立ByteArrayOutputStream对象,用于读出数据

2.建立一个byte数组类型的buffer用于缓冲数据(暂时保存InputStream中的数据) 

3.通过while进行循环次数,标志len,调用InputStream中的read方法,如果没有要读取的数据返回-1,否者读取一个字节的数据到buffer中。 

4.调用OutputStream的write方法将从buffer中的从偏移量(自动加 1)开始的len(当前读取到的位置)个字节读取到输出流中(实际为1个字节) 

5.将输出流的内容调用toByteArray()方法,储存到byte数组中。 6.关闭输入输出流。

public static byte[] readstream(InputStream instream) throws IOException
	{
		ByteArrayOutputStream outstream=new ByteArrayOutputStream();
		byte[] buffer=new byte[1024];
		int len=-1;
		while((len=instream.read())!=-1)
		{
			outstream.write(buffer,0,len);
		}
		byte[] bytedata=outstream.toByteArray();
		instream.close();
		outstream.close();
		return bytedata;
	}


android中使用service方法建立连接:

1.重写onstart方法。

2.在主活动中定义一个静态的handle来接受数据,在service中使用message的形式向handle中添加数据。meeage调用setdata,将从服务器获取的数据通过bundle形式打包,handle调用sendmessage方法。

3.主活动写一个对应的解析方法来解析service中传递的数据。

4.新建一个intent,开始连接服务。

Intent intent=new intent(this,servie.class)
startService(intent);


一些注意事项:

1.使用网络连接,需要在Androidmanifest.xml中注册,同时service也需要注册

2.service和thread的区别,service是依附在主进程之上的是本地服务,独立进程的是远程服务。一个service比起thread更容易控制,在主活动finish之后,thread便不受控制。如果你的thread需要隔一段时间就链接服务器进行同步的话,在activity中启动一个service中定义一个thread可以完美解决问题。有context的地方就能控制service,所以可以多个activity控制同一个service。

3.bundle是android专属的数据传递方法,使用方式json很像,有getstring和putstring的键值对方式。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值