android连接服务器的操作可以使get和post,这里试着使用一下get的方式(post使用Httppost),同时在主活动中调用service的方式进行异步连接服务器(也可以使用thread方法)。
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;
}
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的键值对方式。