数据存储 | 青训营笔记

72 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

网络请求

1.1介绍

客户端向服务端发起请求,服务器返回数据给客户端

1.2网络框架

1.2.1 Volley

(一)主要特点
1. 扩展性强基于接口设计。
2. 一定程度上符合http规范。返回包括ResponseCode 的处理,请求头的处理,缓存机制的支持。
3. 重试以及优先级的定义。
4. 2.3以上基于HttpUrlconnection。2.3以下是Httpclient
5.单的图片加载工具。
(二)使用
首先在build.gradle添加依赖
implementation 'com.mcxiaoke.volley:library:1.0.19'
创建请求队列实例
requestQueue = Volley.newRequestQueue(context);
创建请求Request

  StringRequest stringRequest = new StringRequest(url, new Listener<String>() {
  @Override
  public void onResponse(String response) {
    Log.e("xxxx", "onStringResponse: " + response);
  }}, new ErrorListener() {
  @Override
  public void onErrorResponse(VolleyError error) {
    Log.e("xxxx", "onStringErrorResponse: " + error);
  }
});

将请求加入请求列表
requestQueue.add(stringRequest);

1.2.2 OkHttp

(一)特点
1、请求参数通过构造器模式构建
2、支持同步/异步请求
3、响应Response通过责任链模式处理不同结果
4、使用 DiskCacshe来缓存
(二)使用
添加依赖
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
添加网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
定义请求回调

 public interface OkHttpCallback { void onSuccess(String response); void onFailure(String errorMsg); }

下载文件回调

  public interface OkHttpDownCallBack {
void onDownSuccess(File file);
void onDownloading(long total,long current);
void onDownFailed(String msg);}

封装请求工具类

1.2.3 Retrofit

Retrofit是square开源的网络请求库,底层是使用OKHttp封装
(一)请求方法

格式含义
@GET一个GET请求
@POST一个POST请求
@PUT一个PUT请求
@DELETE一个DELETE请求
@HEAD一个HEAD请求
@OPTIONS一个OPTION请求
@PATCH一个PAT请求

(二)使用

  • 1)添加依赖,这里以AndroidStudio为例:在build.grale添加如下依赖 implementation 'com.squareup.retrofit2:retrofit:2.1.0' implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
  • 2) 创建Retrofit对象
    Retrofit retrofit = new Retrofit.Builder() //使用自定义的mGsonConverterFactory .addConverterFactory(GsonConverterFactory.create()) .baseUrl("http://apis.baidu.com/txapi/") .build(); mApi = retrofit.create(APi.class);
  • 3)发起网络请求
mApi = retrofit.create(APi.class);
Call<News> news = mApi.getNews("1", "10");
news.enqueue(new Callback<News>() {
    @Override
    public void onResponse(Call<News> call, Response<News> response) {
    }
    @Override
    public void onFailure(Call<News> call, Throwable t) {
    }
});

    public interface APi {
    @Headers("apikey:81bf9da930c7f9825a3c3383f1d8d766")
    @GET("word/word")
    Call<News> getNews(@Query("num") String num,@Query("page")String page);
}