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

来源:互联网 发布:足彩n串1算法 编辑:程序博客网 时间:2024/06/06 10:51

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 0