HTTP协议简介
什么是HTTP协议?
• HTTP(Hyper Text Transfer Protocol)协议即超文本传输协议,它规定了浏览器和万维网服务器之间互相通信的规则。
• HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
日常生活中,大多数人遇到了问题都会使用手机进行百度搜索。在浏
览器的地址栏中输入百度的网址点击搜索,此时就会进入百度主页。
这个访问百度的过程就是通过HTTP协议完成的。
从图中可以看出,使用手机客户端访问百度时,会发送一个HTTP请求。
当服务器端接收到这个请求后,会做出响应并将百度页面返回给客户端
浏览器。这个请求和响应的过程实际上就是HTTP通信的过程。
Volley网络框架的使用
什么是Volley?
Volley网络框架简介
- 2013年Google I/O大会上推出的一个新的Android网络通信框架,能使网络通信更快,更
简单,更健壮。- Json,图像等的异步下载
- 网络请求的排序(scheduling)
- 网络请求的优先级处理
- 缓存
- 多级别取消请求
- 和Activity生命周期联动(Activity结束时同时取消所有请求)
Volley主页 https://android.googlesource.com/platform/frameworks/volley
Github地址 https://github.com/mcxiaoke/android-volley
Android 中使用Volley
在Android工程中添加Volley
- compile ‘com.mcxiaoke.volley:library:1.0.19’
- implementation ‘com.mcxiaoke.volley:library:1.0.19’
加网络访问权限:
- android.permission.INTERNET
StringRequest,JsonObjectRequest,JsonArrayRequest,ImageRequest
- 1.创建一个请求队列RequestQueue
- 2.创建Request对象
- 3.将请求对象添加到请求队列中
案例1:狗狗图片APP(一)
UI界面设计
如图:
代码:
1 |
|
加载网络图片
添加Volley框架
1
implementation 'com.mcxiaoke.volley:library:1.0.19'
添加网络访问权限
1
<uses-permission android:name="android.permission.INTERNET"/>
使用ImageRequest加载网络图片
1 | private void loadImage(View view){ |
案例2:狗狗图片APP(二)
- 进行图片缓存
1 | private void loadCacheImage(View view){ |
BitmapCache类(见素材)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34package com.example.imagenet;
import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader;
/**
* 图片缓存
*/
public class BitmapCache implements ImageLoader.ImageCache{
private LruCache<String,Bitmap> mCache;
public BitmapCache() {
int maxSize = 10* 1024 *1024;//10m
mCache = new LruCache<String,Bitmap>(maxSize){
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url,bitmap);
}
}
Json解析框架Gson的使用
JSON格式数据介绍
JSON:独立于语言和平台,比 XML 更小、更快,更易解析。JSON数据
已经成为了互联网中大多数数据的传递方式。
Android 之 JSON格式数据解析
Android平台自带了JSON解析的相关API,可以将文件、输入流中的数据转化为JSON对象,然后从对象中获取JSON保存的数据内容。
Android的JSON解析部分都在包org.json下,主要有以下几个类:
- JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元。
- JSONStringer:json文本构建类 ,根可以帮助快速和便捷的创建JSON text。
- JSONArray:它代表一组有序的数值。
- JSONTokener:json解析类。
1 | JSONObject jsonObject = new JSONObject(result); |
案例3:豆瓣电影APP(一)
Volley及INTERNET权限
添加Volley框架
添加网络访问权限
添加图片缓存BitmapCache类(见素材)
改造电影实体Movie类,添加电影图片url:imgUrl
加载豆瓣电影列表
- 使用JsonObjectRequest加载豆瓣电影数据
- 豆瓣电影列表
- 使用BitmapCache类缓存电影图片
– 提示:返回数据为Json数据:
– JsonObjectRequest,JsonArrayRequest
Gson 框架简介
- Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等
- 基础概念:
- Serialization:序列化,使Java对象到Json字符串的过程。
- Deserialization:反序列化,字符串转换成Java对象
- Gson的两个基础方法:
- toJson(); 将bean对象转换为json字符串
- fromJson(); 将json字符串转为bean对象
Gson 框架的使用
在Android Studio中添加Gson框架
定义Json字符串对应的实体类(key - 属性)
使用Gson框架:
1
2
3
4// toJson 将bean对象转换为json字符串
String jsonStr = gson.toJson(movie, Movie.class);
// fromJson 将json字符串转为bean对象
Movie movie = gson.fromJson(jsonStr, Movie.class);
Gson 框架的注解
@Expose注解
serialize和deserialize属性可选,默认为true。
serialize 为true:调用toJson时会序列化该属性,
deserialize 为true:调用fromJson生成Java对象时不会进行反序列化。
注意:如果采用new Gson()方式创建Gson,@Expose没有任何效果
@SerializedName注解
能指定该字段在序列化成json时的名称。
注意:实际开发中我们会遇到比较复杂的Json,比如json中嵌套json数组,这个时候,就需要我们自定义序列化或反序列化方法了