采用get方式提交数据到服务器
Get请求在网页发送过程中的抓包:
在安卓代码中如何使用Get请求网络数据:
采用post方式提交数据到服务器
Post请求在网页发送过程中的抓包:
在安卓代码中如何使用Post请求网络数据:
get和post请求数据比较
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE,TRACE 和 CONNECT 方法。
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和POST。
GET 方法
优点:代码简单 容易编写 只需要在url后面组拼字符串
缺点:不可以提交太大的数据,规定组拼路径最大长度不超过4k, 不安全。
请注意,查询字符串(名称/值对)是在GET 请求的 URL 中发送的:
/test/demo_form.asp?name1=value1&name2=value2
POST 方法
优点:安全,用流的方式把数据写入到服务器 提交数据没有最大长度的限制
缺点:代码编写不方便。
请注意,查询字符串(名称/值对)是在POST 请求的 HTTP 消息主体中发送的:
POST
/test/demo_form.asp HTTP/1.1
Host:w3schools.com
name1=value1&name2=value2
网络请求的注意点:
1. 在安卓4.0版本以后请求网络的代码不能在主线程中运行。
2. 使用网络请求必须在AndroidMenifest.xml文件中申明使用权限。
在android:name="android.permission.INTERNET" />
开源httpclient的get 和post请求
前面我们讲解了使用HttpUrlConnection来处理Http的两种常用请求,接下来我们使用一套名叫HttpClient的面向对象的API处理Http请求,至于工作中如何对请求选型,同学们可以根据对代码熟悉程度来决定。
1. HttpClient的Get请求:
2.HttpClient的Post请求:
开源httpclient的POST请求
除了上面两种安卓官方指定的请求方式,当面还有一些第三方的开源项目可以使用,这里介绍另外一个工具android-async-http-master,其可以在github
上下载。以下简单介绍其开发步骤:
1. 导包:资料\第三方资料\android-async-http-master\library\src\main\java
2. 在AndroidMenifest.xml文件中申明使用权限 :
在<manifest />标签内添加<uses-permissionandroid:name="android.permission.INTERNET" />
3. 找到主要的类:该类支持的方法有delete get header post put...
4. 实现代码:如下post方法有三个参数 1.网络地址 2.请求参数 3.返回值的监听器
开源httpclient文件上传
android-async-http-master除了可以在请求过程中发送请求参数还可以做上传文件的功能。
上传文件一般需要使用到两个参数 一个是文件名(比如key=”fName”
value=”aa.jpg”) 一个是要上传的文件 (key=”file”value=”上传的文件流”)
开发步骤:
1. 服务器准备好upload项目 客户端将所需要上传的文件添加到sd卡里面
2. 添加权限:
3. 写代码:
多线程下载原理1
多线程下载原理2
网络下载文件制定位置的请求头
Range, "bytes=100-200"
RandomAccessFile 类的构造方法中如下模式
"r" 以只读方式打开。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,实时将内存数据写入到文件里面去的,不单修改文件里面的内容 修改了这个描述这个文件里面的元数据
"rwd" 打开以便读取和写入,实时将内存数据写入到文件里面去的,主要只修改文件里面的内容
"rws" 和 "rwd"
模式的工作方式极其类似 :
如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,可以保证由该调用对此文件所做的所有更改均被实时写入该设备。这对确保在系统崩溃时不会丢失重要信息特别有用。
多线程断点下载原理
开发步骤:
1. 创建一个变量mLastPosition 记录上次保存的位置。默认赋值为mStartPosition. 当发现有保存进度的文件,则从保存进度的文件中获取。
2. 告诉系统 实际下载位置从mLastPosition开始下载,写数据也从mLastPosition开始写。
3. 创建一个局部变量totalCount记录mLastPosition,并在写的过程中计算真实需要保存的进度值。最后将值实时写入系统。
出现的问题:
界面没有进度值开发步骤:
1. 在点击事件中添加ProgressBar
2. 为ProgressBar设置进度
网友评论