HTTP协议简介
什么是HTTP协议?
? HTTP(Hyper Text Transfer Protocol)协议即超文本传输协议,它规定了浏览器和万维网服务器之间互相通信的规则。 ? HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
日常生活中,大多数人遇到了问题都会使用手机进行百度搜索。在浏 览器的地址栏中输入百度的网址点击搜索,此时就会进入百度主页。 这个访问百度的过程就是通过HTTP协议完成的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlsMl4t7-1627189037278)(https://cdn.jsdelivr.net/gh/llz-github/image/img1/20210203150226.png)]
从图中可以看出,使用手机客户端访问百度时,会发送一个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
案例1:狗狗图片APP(一)
UI界面设计
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OTKc2xAq-1627189037282)(https://cdn.jsdelivr.net/gh/llz-github/image/img1/20210203161129.png)]
代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_img"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_launcher_foreground" />
<EditText
android:id="@+id/edt_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="请粘贴链接地址" />
<Button
android:id="@+id/btn_commit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="提交" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
加载网络图片
private void loadImage(View view){
requestQueue = Volley.newRequestQueue(this);
String url = editText.getText().toString();
ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imageView.setImageBitmap(response);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,"网络错误",Toast.LENGTH_SHORT).show();
}
});
requestQueue.add(request);
}
案例2:狗狗图片APP(二)
private void loadCacheImage(View view){
requestQueue = Volley.newRequestQueue(MainActivity.this);
String url = editText.getText().toString();
ImageLoader imageLoader = new ImageLoader(requestQueue,new BitmapCache());
ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
imageLoader.get(url,imageListener);
}
-
BitmapCache类(见素材) package 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;
mCache = new LruCache<String,Bitmap>(maxSize){
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url,bitmap);
}
}
Json解析框架Gson的使用
JSON格式数据介绍
JSON:独立于语言和平台,比 XML 更小、更快,更易解析。JSON数据 已经成为了互联网中大多数数据的传递方式。
Android 之 JSON格式数据解析
JSONObject jsonObject = new JSONObject(result);
int resultCode = jsonObject.getInt("resultcode");
JSONArray resultJsonArray = jsonObject.getJSONArray("result");
JSONObject resultJsonObject = resultJsonArray.getJSONObject(0);
String city = resultJsonObject.getString("city") ;
案例3:豆瓣电影APP(一)
Volley及INTERNET权限
加载豆瓣电影列表
- 使用JsonObjectRequest加载豆瓣电影数据
- 豆瓣电影列表
- https://douban.uieee.com/v2/movie/in_theaters
- https://api.douban.com/v2/movie/in_theaters
- subjects - 电影列表
- 使用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框架:
String jsonStr = gson.toJson(movie, Movie.class);
Movie movie = gson.fromJson(jsonStr, Movie.class);
Gson 框架的注解
- @Expose注解
serialize和deserialize属性可选,默认为true。 serialize 为true:调用toJson时会序列化该属性, deserialize 为true:调用fromJson生成Java对象时不会进行反序列化。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSKdlJwQ-1627189037286)(https://cdn.jsdelivr.net/gh/llz-github/image/img1/20210204154849.png)]
注意:如果采用new Gson()方式创建Gson,@Expose没有任何效果
- @SerializedName注解
能指定该字段在序列化成json时的名称。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IIz0ThRk-1627189037290)(https://cdn.jsdelivr.net/gh/llz-github/image/img1/20210204154849.png)]
属性可选,默认为true。 serialize 为true:调用toJson时会序列化该属性, deserialize 为true:调用fromJson生成Java对象时不会进行反序列化。
[外链图片转存中…(img-xSKdlJwQ-1627189037286)]
注意:如果采用new Gson()方式创建Gson,@Expose没有任何效果
- @SerializedName注解
能指定该字段在序列化成json时的名称。
[外链图片转存中…(img-IIz0ThRk-1627189037290)]
注意:实际开发中我们会遇到比较复杂的Json,比如json中嵌套json数组,这个时候,就需要我们自定义序列化或反序列化方法了
|