网络通信和数据存储|青训营笔记

131 阅读2分钟

网络通信和数据存储|青训营笔记

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

Retrofit的使用

Retrofit其实是对OkHttp的一个封装,Retrofit就是充当Adapter的角色,将Java接口翻译成Http请求,再通过OkHttp发送请求 Retrofit有以下几个优点:

  1. 使用注解方式,让人一目了然
  2. 支持同步和异步执行,使得请求变得异常简单
  3. 可配合rxjava,使用更加简洁

使用

  • 添加依赖
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    //...其他依赖
}

创建网络请求接口

interface IUserInfoService {

    @GET("users/{uid}/name")
    fun getUserName(@Path("uid") uid: Int): Call<ResponseBody>

    //@GET("users/{name}/uid")
    //fun getRequest(@Path("name" name:String)) Call<User>
    
    //后续可以增加其他的接口,一个接口对应一个api请求
}


  • 函数名:可自定义,需要能识别出该接口的作用,该interface里可以增加多个不同的函数
  • @GET 注解:用于指定该接口的相对路径,并采用Get方法发起请求
  • @Path 注解:需要外部调用时,传入一个uid,该uid会替换@GET注解里相对路径的{uid}
  • 返回值Call,这里用ResponseBody,我们可以直接拿到请求的String内容
  • 如果要自动转为Model类,例如User,这里直接替换为User就好。

发起网络请求

    //创建Retrofit实例
    val retrofit = Retrofit.Builder()
        .baseUrl("https://www.bytedance.com/")
        .build()
    //创建iUserInfoService实例
    val iUserInfoService = retrofit.create(IUserInfoService::class.java)
    //创建网络请求Call对象
    val call = iUserInfoService.getUserName(1123)
    //发起异步请求
    call.enqueue(object : Callback<ResponseBody> {

        override fun onResponse(call: Call<ResponseBody>,
                                response: Response<ResponseBody>) {
            //请求成功时回调
            request_result_tv.text = "请求成功:" + response.body()!!.string()
        }

        override fun onFailure(call: Call<ResponseBody>, e: Throwable) {
            //请求失败时候的回调
            request_result_tv.text = "请求失败:" + e.message
        }
    })
}

Retrofic调用OkHttp

image.png

TTNet的优点

  • 基于Retrofit改造,具备了Retrofit所具有的优点
  • 支持多个Http网络库的动态切换(okhttp和cronet)
  • 支持网络拦截配置:添加公共参数、动态切换协议及Host 、动态选路等
  • 支持流解析,json序列化

TTNet类图设计

image.png

TTNet主流程

image.png

总结

image.png

数据存储

Room数据库的使用

主要的三个组件

  • 数据库类(Database),用于保存数据库并作为应用持久性数据底层连接的主要访问点。
  • 数据实体(Entity),用于表示应用的数据库中的表。
  • 数据访问对象(DAO),提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法。

Room接入

  1. 添加依赖
  2. 设计表
  3. 新建Entity

image.png 4. 新增DAO:定义一个名为UserDao的DAO。用来对User表的增删改查

image.png 5. 新建数据库类

image.png 6. 获取dao对象,进行各种操作

image.png

Room原理

核心

  • 编译期,通过kapt处理@``Dao@Database注解,动态生成对应的实现类
  • 底层使用Android提供的SupportSQLiteOpenHelper实现数据库的增删改查等操作

总结

image.png