Android中使用网络通信工具类
来源:互联网 发布:如何测试网络的连通性 编辑:程序博客网 时间:2024/05/17 09:12
/**
* 无用的话 begin
*
* 做了两年的android,做了一年的MFC
* 感觉没有很完整的技术积累,不知道用什么方式提升
* 脑子里面乱七八糟,很不舒服的感觉
* 决心用blog来记录自己用到的东西,给自己有个完整交代:)
*
* 无用的话 end
*/
现在大家在做应用的时候,很少还是单机的了=。=
毕竟网络这么发达,如果一个应用的数据很少变更,用的时间长了会降低新鲜感
so,对于一个正常的应用来说,有网络通信的功能是很基本的
网络通信要注意的东西很多:性能,效率,安全性,数据完整。。。
在一个工程中,为了方便使用,以及考虑代码的封装,维护等方面,很多情况下会考虑对网络通信进行封装,做成一个工具类来处理网络请求
抽取工具类嘛,大家都知道的,抽取共性部分,独特性的部分抽取接口,按流程调用
比如一个最简单的Http连接和读写包含:
1.创立连接的对象(connection) - 传入url地址
2.向服务器请求的输出流(outputstream) - 传入各请求需要的request
3.从服务器返回的输入流(inputstream)
4.缓存返回的内容(data outputstream) - 处理各接口返回的内容,获得response
5.关闭输入输出流,释放资源
HttpConnectionBase
{
...
HttpURLConnection conn = null;
DataOutputStream dataOutputStream = null;
InputStream inputStream = null;
ByteArrayOutputStream byteOutputStream = null;
try {
URL url = new URL(mURL);
conn = openHttpConnection(url);
conn.setConnectTimeout(30000);
conn.setReadTimeout(300000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
dataOutputStream = new DataOutputStream(conn.getOutputStream());
dataOutputStream.write(requestStr.getBytes("UTF-8"));
dataOutputStream.flush();
int resultCode = conn.getResponseCode();
Log.d(TAG, "connection result : " + resultCode);
if (HttpStatus.SC_OK == resultCode) {
inputStream = conn.getInputStream();
byteOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while (-1 != (len = inputStream.read(buffer))) {
byteOutputStream.write(buffer, 0, len);
}
byte[] data = byteOutputStream.toByteArray();
String jsonStr = new String(data, "UTF-8");
result = readSuccessResult(jsonStr);
} else {
result = readResultFail();
}
} catch (Exception ex) {
} finally {
closeStreams(dataOutputStream, inputStream, byteOutputStream);
}
}
其中【URL】,【request】,【response】可以作为抽象方法,根据对应的接口实现对应的功能方法
如果要使类在结构上看起来更清晰,可以新增requestBase,responseBase和jsonOperator这三个类,让接口和功能方法区别的更清楚
在网络请求的调用上,由于网络请求通常较为耗时,所以会考虑使用子线程来执行,在执行完成后,将结果返回给主线程
这样的做法又涉及到一部分设计模式的考虑,当然,可以直接使用Handler发送消息来执行,
但是在工程代码规模较大的时候,如果都使用这样的方式,在设计上看起来就没有那么优雅啦,而且对后期的维护也会造成很大的困扰
/*
* 有点晚啦,明天继续,要是一天写完了,后面就没有动力啦:)
*/
0 0
- Android中使用网络通信工具类
- 网络通信_wireshark工具使用
- Android网络开发中如何使用JSON进行网络通信
- android HttpClient网络通信工具类基于XML
- Android网络通信中数据传输的JSON格式使用
- Android网络通信中数据传输的XML格式使用
- Android中网络通信技术
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- Android中基于TCP协议的网络通信之使用Socket进行通信
- Android中基于TCP协议的网络通信之使用Socket进行通信
- Android网络开发中如何使用JSON进行网络通信---Android_JSON数据通讯方法解析
- android中使用Okhttp进行网络请求的工具类(二)
- Android 网络通信(Asynctask类的使用)
- Linux网络通信工具
- linux网络通信工具
- Android中基于Socket的网络通信
- Android中基于Socket的网络通信
- APP国际化&添加拨号权限&文字输入类型。
- android studio错误
- AJAX
- java与xml之SAX解析XML文档
- LeetCode--No.111--Minimum Depth of Binary Tree
- Android中使用网络通信工具类
- [LeetCode] 16. 3Sum Closest
- 安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)
- TableLayout 的collapseColumns、shrinkColumns、stretchColumns
- hdu 1069 Monkey and Banana DP
- java与xml之JDOM生成和解析XML文档
- Super Ugly Number
- Oracle函数及操作符
- Hibernate注解