必威体育Betway必威体育官网
当前位置:首页 > IT技术

[安卓基础]学习第五天

时间:2019-10-16 23:41:05来源:IT技术作者:seo实验室小编阅读:67次「手机版」
 

赤坂龙之介

一、使用httpurlconnection方式把数据提交到服务器

基于http协议
get方式:组拼url地址把数据组拼到url上,大小限制1kb,4kb
post请求:安全,无大小限制

1-1. post和get区别

1. 路径不同
2. 请求方式post,通过请求体的方式把数据写给服务器(以流的形式)
3. post多了content-Length,Content-Type还有请求体

1-2 post请求

1. 修改路径
2. GET方式改POST
3. 新增两个请求头信息
    - conn.setrequestproperty("Content-Type","APPlication/x-www-form-urlencoded");
    - conn.setRequestProperty("Content-Length",data.length() + "");
4. 把我们的数据以流的方式进行提交
    - conn.setDoOutput(true); // 设置一个标记,允许输出
    - conn.getOutputSream(data.getBytes());

二、乱码问题的解决

iso-8859-1
服务器在传输的过程中以二进制的形式传输数据

【小细节】如果提交中文,需要进行URLEncode编码,

  • URLEncode.encode(name);

三、以httpclient方式把数据提交到服务器

HttpClient是一个接口,我们直接使用它的子类即可

Interface for an HTTP client. HTTP clients encapsulate a smorgasbord of objects required to execute HTTP requests while handling cookies, authentication, connection management, and other features. Thread safety of HTTP clients depends on the implementation and configuration of the specific client.

3-1. get方式请求数据

// 部分代码

// 获取HttpClient实例
DefaultHttpClient client = DefaultHttpClient();
// 准备get请求,定义一个httpget实现
HttpGet get = new HttpGet(path);
// 执行一个get请求
Httpresponse respense = client.execute(get);
// 获取服务器返回状态
int code = response.getStatusLine().getStatusCode();
if(code == 200){
    // 以流的形式返回数据
    InputStream in = response.getEntity().getContent();
    //.......实现部分,代码为未写出

}

3-2. post方式请求数据

// 获取HttpClient实例
DefaultHttpClient client = DefaultHttpClient();
// 准备post请求,定义一个httpget实现
HttpPost post = new HttpPost(path);

// 准备parameters
List<NameValuePair> lists = new ArrayList<namevaluepair>();

// 准备NameValuePair,实际上就是我们要提交的用户名和密码,key是服务器key
BasicNameValuePair nameValuePair = new BasicNameValuePair("username",name);
BasicNameValuePair pwdValuePair = new BasicNameValuePair("password",pwd);

// 把nameValuePair和pwdValuePair加入到集合中
lists.add(nameValuePair);
lists.add(pwdValuePair);

// 准备entity
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(lists);

// 准备post方式提交的正文,以实体形式准备(键值对形式)
post.setEntity(entity);

HttpResponse respense = client.execute(post);
// 获取服务器返回状态
int code = response.getStatusLine().getStatusCode();
if(code == 200){
    // 以流的形式返回数据
    InputStream in = response.getEntity().getContent();
    //.......实现部分,代码为未写出

}

四、开源项目方式把数据提交到服务器

asyncHttpClient

4-1. get方式提交

// 创建 AsyncHttpClient
AsyncHttpClient client = new AsyncHttpClient();
// 进行get请求
client.get(path,new AsyncHttpResponsehandler(){
    // 请求成功的回调方法
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody){
        toast.maketext(getApplicationcontext(), new String(responseBody),1).show();
    }
    // 请求失败的回调方法
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, throwable ERROR){
        Toast.makeText(getApplicationContext(), new String(responseBody),1).show();
    }
});

4-2. post方式提交

// 创建 AsyncHttpClient
AsyncHttpClient client = new AsyncHttpClient();

// 准备请求体的内容 
Resquestparams params = new ResquestParams()
params.put("username",name);
params.put("password",pwd);
client.post(path,params,new AsyncHttpResponseHandler(){
        // 请求成功的回调方法
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody){

    }
    // 请求失败的回调方法
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error){

    }
};

4-3. 总结

  1. httpurlconnection
  2. httpclient(了解,没人用)
  3. 开源项目(asyncHttpClient)

五、javase多线程下载

 为什么多线程能够提高速度

注意几点:[1] 不是线程开得越多下载越快 [2]受服务器带宽的影响

image

5-1.线程下载分配公式

- 前面的线程(n)   n*blockSize-(n+1)*blockSize-1
- 最后一个线程(m) m*blockSize-length-1

5-2.添加range头信息

作用,告诉服务器,每个文件下载的位置
conn.setResquestProperty("Range","bytes=" + startIndex + "-" + endIndex);

5-3.状态码改为206,请求部分资源成功

六、断点续传实现

6-1.解释

就是把当前线程下载的位置给存起来,下次下载的时候就是再上次下载断点处继续下载

七、断点续传逻辑移植到安卓上

八、开源项目实现多线程下载

相关阅读

H264编码基础概念+格式分析

一、编码基础概念 1、为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多

焊接原理与基础

前言: 电弧的物理本质 焊接电弧是由焊接电源供给能量,在具有一定电压的两极之间或电极与母材之间的气体介质中产生的强烈而持久的放

最新全套Java基础视频教程

深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗。为此我呕心沥血整理了这套Java教程,不管你是不懂电脑的小白,还

python编程基础:图形库之Pillow使用方法

PIL vs Pillow PIL: Python Imaging Library,是python的图像处理库。由于PIL不兼容setuptools,再加上更新缓慢等因素,Alex Clark等

零基础Unreal Engine 4(UE4)图文笔记之准备篇(一)

简介:十篇文章介绍虚幻4引擎的入门和基本内容,蓝图、材质、粒子效果、UI界面等 系列目录 准备篇 基本操作 材质入门 初步运行

分享到:

栏目导航

推荐阅读

热门阅读