这是我参与「第四届青训营 」笔记创作活动的的第4天 哈喽啊家人们,今天我又来写笔记咯,上一篇我们介绍了Android常用的界面组件。那么今天我们就来学学Android的网络通信和数据存储。那我们就开始吧!
背景:信息流可以无限刷新(去服务端请求) 冷启时,快速展现信息流内容(本地存储请求)
网络通信
- HttpURLConnection:Android SDK
- Volley:Google,应用于数据量小
- OkHttp:square,支持大文件传输,拦截器设置
- Retrofit:square,具备OkHttp的所有优点,更强大
Retrofit
Android平台最热门的框架
使用
引用Retrofit库
创建网络请求接口
使用Retrofit发起网络请求
- 新增Retrofit依赖
dependencies{
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
}
- 创建网络请求接口
interface IUserInfoService{
//使用get请求
@Get("user/{uid}/name")
fun getUserName(@Path("uid") uid:int): Call<ResponseBody>
//一个接口对应一个api请求
}
@GET注解:该接口的相对路径,并采用Get方法发起请求
@Path注解:传入一个uid,该uid会 替换@GET注解里相对路径的{uid}
返回值Call:这里用ResponseBody,我们可以直接拿到请求的String内容
3.
TTNET
基于Retrofit改造,具有Retrofit的所有优点
注解
- @Override:重写父类的实现
- Nullable:对象可能为空
- @Get:请求方法
- @Path:路径
总结
图片引用于字节跳动Android基础课程
数据存储
数据存储方式
持久性的本地数据存储
- SharedPrefernces
- 只能存放Boolean、int、float、long、String5种类型
- 键值对方式存储
- 文件存储
- 各种格式的文件
- 不能跨APP共享
- ContentProvider
- 可共享
- URI进行对象访问
- SQLite存储数据
- 存储结构化数据
- 进行数据增删改查
数据库框架对比
引用于字节跳动青训营Android基础课程
Room数据库使用介绍
Room在SQLite上提供了一个抽象层 三大组件
- 数据库类(Database)
- 数据实体(Entity)
- 数据访问对象(DAO)
使用案例
Room接入: 在Gradle目录中的build.gradle文件里添加如下代码:
dependencies{
def room_version = "2.4.2"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"//注解处理器
}
创建一个User数据表
@Entity
data class User(
@PrimaryKey(autoGenerate = true) val uid:int?,
@ColumnInfor(name = "first_name") val firstName: String?,
@ColumnInfor(name = "lastt_name") val lastName: String?
)
创建DAO
@Dao
interface UserDao{
//查询全部用户
@Query("select * from user")
fun getAllUser() : List<User>?
//新增用户
@Insert
fun insertAllUser(vararg users: User)
//删除用户
@Delete
fun deleteUser(users : User)
}
新建数据库
@Database(entities = [User::class],version = 1)
abstract class AppDatabase : RoomDatabase(){
abstract fun userDao(): UserDao
}
进行增删改查 图片引用于字节跳动Android基础课程
Room数据库原理介绍
- 编译期,通过kapt处理@Dao、@Database等注解,生成对应的实现类
- 低层使用的是Android提供的SupportSQLiteOpenHelper实现数据库增删改查等操作
图片引用于字节跳动Android基础课程