Android的网络通信,由于版本的废弃,现在大体分以下两种:
1、HttpUrlConnection
2、OkHttp
Android网络通信无非就是发送请求、获得应答、解析应答。
请求方式有两种:get和post请求。
1、get请求是一种以明文方式追加在URL后面形式,不安全,但是使用起来方便。
2、post请求是以暗文显示的,如果连账号,密码这样的私密信息都在网址(URL)中显
示就太不安全了,适用 要比get稍微麻烦些。
3、get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方
式。
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方
式。
get:url:http://wwwtest.rupeng.cn:8888/QueryAvatarInfo.ashx
字段 action GetAllNames
这是get请求,需要在url后面添加?action=GetAllNames才会有结果。
http://wwwtest.rupeng.cn:8888/QueryAvatarInfo.ashx?action=GetAllNames
大致get请求就是url?key1=value1&key2=value2….一般都是get请求。
post则不会这样看出后面key和value,使用特殊的加密方式才可以找到。
先来说HttpUrlConection的get请求。
1.huc=URL.openconnection() 通过URL打开连接
2.huc.connect() 建立连接
3.huc.getinputstream() 获得读取流
如果需要字符串内容,定义字符串,通过读取流经典读法进行读取就可以了。
我们来尝试读取百度首页的字符串内容(其实是html代码)。
这里因为读取内容是耗时操作,需要放在子线程当中,子线程无非访问UI线程,整个内
容显示用TextView,用了AsyncTask封装来操作子线程。
AsyncTask task = new AsyncTask(){
@Override
protected String doInBackground(URL... params) {
// TODO Auto-generated method stub
HttpURLConnection huc=null;
StringBuffer buffer=new StringBuffer();
try {
huc=(HttpURLConnection) params[0].openConnection();
huc.connect();
InputStream inputStream = huc.getInputStream();
int len=0;
byte b[]=new byte[1024];
while((len=inputStream.read(b))!=-1)
{
buffer.append(new String(b,0,len));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
huc.disconnect();
}
return buffer.toString();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
tv.setText(result);
}
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
};
URL params = null;
try {
params = new URL("http://www.baidu.com");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
task.execute(params);
来个更高级的,通过网络下载文件(金山卫士),我们弹出dialog来显示进度。
下载结束后会多出jianshan.exe文件
total = huc.getContentLength();可以获得文件的总大小。
HttpUrlConnection的post请求无非多了几步。
在huc.connect之前先进行huc.setRequestMethod(“POST”);设置请求是post,默认
是get写不写无所谓。在连接之后需要加上后面的key=value信息,是通过写流写进去的
OutputStream os = huc.getOutputStream();
os.write(“action=GetAllNames”.getBytes());
同样能达到get效果。
涉及到网络和sdcard需要加载网络权限和挂载sdcard和写入权限。