您的位置:首页 > 理论基础 > 计算机网络

Android——网络通信(HttpUrlConnection)

2017-03-23 09:39 369 查看
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<URL, Void, String> task = new AsyncTask<URL, Void,
String>(){

@Override
protected String doInBackground(URL... params) {
// TODO Auto-generated method stub
HttpURLConnection huc=null;
StringBuffer buffer=new StringBuffer();
try {
huc=(Ht
4000
tpURLConnection) 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和写入权限。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息