Android网络编程pdf,txt教程

今天,给大家讲些点网络通信


我们所谓的移动开发,当然跟互联网息息相关,所以凡是涉及互联网的任何软件任何程序都少不了联网模块的开发

可见Android网络开发模块是开发中多么重要的一部分,那么Android是怎么样进行网络通信的呢? Android绝对大多数网络通信都是 基于Http协议 ,那么什么是Http协议呢?简单来说,它是属于应用层的面向对象的协议,通过传输层的TCP协议在客户端和服务器之间传输数据

目前有几种比较热门的网络开发框架,如 volley、okhttp、android-async-http

不过,今天不讲这些
我们讲Android最基础的网络通信方式

在Android上原始的网络通信方式有两种, 基于Java的HttpURLConnection和Apache提供的HttpClient

比较这两者,如果从开发的便捷程度来说,在我看来,还是HttpClient比较方便一些,但是可能因为它的API数量过多,进行升级和扩展的过程中,很容易破坏兼容性,出现bug

而且它提升速度和省电方面也没有HttpURLConnection的好,所以Google现在直接宣布不再支持HttpClient

不过,基于学习的角度,我建议初学者还是去学习一下

所以,我今天就主要讲基于Java的HttpURLConnection,其实包括volley等热门框架,也是基于HttpURLConnection封装而已的

所以,学习HttpURLConnection,自己学会封装HttpURLConnection是十分有必要

这对于今后框架的使用和理解是十分有益的

掌握HttpUrlConnection编程大概需要以下几个步骤: //将访问的路径转换成URL URL url = new URL(urlStr); //通过URL获取连接 conn = (HttpURLConnection) url.openConnection(); //设置参数 conn.setReadTimeout(3000); conn.setConnectTimeout(3000); //设置请求方式 conn.setRequestMethod(“GET”); //判断响应码 if (conn.getResponseCode() == 200) //进行数据的获取 is = conn.getInputStream(); bos = new ByteArrayOutputStream(); int len = -1; byte[] bytes = new byte[1024]; while ((len = is.read(bytes)) != -1) { bos.write(bytes, 0, len); } bos.flush(); return bos.toString(); 当然,HttpUrlConnection也分为GET请求和POST请求

如果是POST请求,如果在获取内容之前再增加这两个步骤: // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); //发送参数 if (param != null && !param.trim().equals(“”)) { // 获取URLConnection对象对应的输出流 os = conn.getOutputStream(); // 发送请求参数 os.write(param.getBytes()); // flush输出流的缓冲 os.flush(); } 其实,HttpUrlConnection编程的步骤真的一点都不难,如果用心点理解就很简单了

不过,运用到实战中,可能就会出现各种各样的问题

第一个:输入流与输出流之间的转换,这个没好的办法,好好把java 的IO部分再研读一番

第二个:便是网络通信不能在主线程进行
我讲下第二个问题的解决办法

这个问题,很多初学者肯定都会碰到,Android在后面已经不允许耗时耗资源的操作在UI线程上进行,也就是主线程上进行

这意味着我们在 进行网络编程的时候,必须开辟子线程进行多线程操作

多线程操作有几种方法进行操作,如:Handler机制、AsyncTask异步加载

这几种方法我都尝试过,这里我谈一种,也是性能比较好的一种

我封装的主要思路是 采用Handler机制中的handler.post,并且创建线程池进行性能优化,最后通过继承回调接口实现UI界面的更新, 代码如下: private static Handler handler = new Handler(); private static ExecutorService executor = Executors.newFixedThreadPool(5); // 开辟线程池,体现性能优化 /** * 回调接口,更新UI */ public interface CallBack { void onRequestComplete(String result); } /** * 异步的Get请求 * @param urlStr * @param callBack */ public static void doGetAsyn(final String urlStr, final CallBack callBack) { executor.execute(new Runnable() { @Override public void run() { final String result = doGet(urlStr); handler.post(new Runnable() { @Override public void run() { if (callBack != null) { callBack.onRequestComplete(result); } } }); } }); } 我上传两个Http编程的工具类在GitHub,点击原文链接便能跳转到GitHub页面

大家可以上去下载使用
当然,我还是建议大家自己学习自己封装,封装方法有特别多种

作为一名合格的程序猿,必须要学会造轮子,就算现在造重复的也没事

大家,请记住造轮子是一门进阶必备的技能

还有,记得点原文链接去看看喔!! Android奋斗者 欢迎关注我的: 博客: http://blog.csdn.net/simple727 GitHub: https://github.com/simple24 [愿你我用双手改变世界 ]


发表回复