安卓基础5:网络编程2
安卓基础5:网络编程2
登陆案例:
Get vs post:
1、 写登陆界面
2、 搭建服务器环境,就是写servlet代码
3、 写安卓的业务逻辑
a) 写基本的安卓业务逻辑:找相关控件
b) Get方式把数据提交到服务器()
c) Post方式把数据提交到服务器
4、 加上网络访问权限
乱码问题的解决:
只要两边编码方式需要统一;
原因,安卓提交到tomcat,其编码格式为ios-8859-1;而安卓以本地码表编码
Post方式不存在乱码问题;
基本提交方式:
代码:
tomcat服务器端的代码:
界面:
事物处理层:
Get提交:
Post提交:
方法区:
httpClient方式提交数据:
httpclient实际上也是一个开源的项目,android工程师直接封装到了API中;
该类在执行请求之后,获取相应的回传数据,这里的回传类HttpResponse里面封装了
1、回传的状态行getStatusLine 2、获取回传的数据体(通过流封装的)
Get发送
1、 初始化httpClient
2、 执行一个get请求
3、 准备get请求的参数,
4、 获取状态码和服务器返回的内容
代码:
Post发送
1、 初始化httpClient
2、 执行一个get请求
3、 准备post请求的参数,
4、 获取状态码和服务器返回的内容
代码
开源项目AsynchttpClient提交:
使用:
1、 创建asynchttpclient对象
2、 执行get请求
优点,不用开子线程,不用使用handler
Get发送:
代码:
Post发送
代码:
文件上传:
步骤:
1、 搭建服务器
2、 画UI界面
3、 实现上传的业务逻辑
4、 主要通过asyncHttpClient实现
代码:
服务器tomcat代码:
界面:
事物处理层:
多线程加速下载:
注意:不是线程开的越多下载越快,其受服务器真实带宽的影响、受CPU处理速度的影响(手机迅雷:推荐2-3个)
多线程下载需要注意的东西:
1、 如何获取服务器文件大小
2、 计算每个线程下载的开始的位置和结束位置
3、 在客户端创建一个大小和服务器一模一样的文件
4、 如何开启多个线程
5、 什么时候每个线程都下载完毕
常规多线程下载步骤:
1、获取服务器文件大小
2、在客户端创建和服务器大小一模一样的文件
3、计算出每个线程下载的开始位置和结束位置
5、 在for循环中开启多个线程
a) 注意服务器返回为206:请求部分资源成功
代码
界面:
显示界面
ListView模板界面:
事物处理层:
主流程:
下载方法:
工具类
RandomAccessFile对象对底层文件进行操作,同时可以设置文件读写位置,因此是做断点续传比较好的写工具;
实现断点续传:
1、 把当前线程下载的位置存储起来,注意:不要用FileoutputStream
2、 在每次下载的时候继续上次的位置继续下载;
3、 文件下载完成之后,把.txt文件删除
(与进度相关的进程都可以直接在子线程更新UI;eg:进度条progressbar和progressDialog)
这里可以添加的额外功能:
1、 判断sd卡是否存在
2、 判断sd卡空间是否足够
3、 判断网络类型
4、 判断手机是否有病毒
使用开源项目xutils实现下载
1、 创建httputils对象
httpUtils http = new HttpUtils();
2、 实现下载功能
3、 加入网络和写SD卡权限
代码
界面:
事物处理层:
Jason解析:
1、 若以{}封装,通过jasonobject对象进行解析
2、 若以[]封装,通过jasonarray对象进行解析
代码:
手机归属地查询:
代码:
界面:
事件处理层:
流下载工具类:
上面都是上古时代的下载方法。我们就看看大体的下载方法和处理方式就行了。