关于数据操作相关的库有不少の前有写过用谷歌官方的一些工具类对数据库进行操作的demo,工程中需要使用greenDao来对数据库进行操作因此写了个简单的demo,以及自己的一些理解
Android中的数据库使用的是Sqlite,至于这个玩意到底什么不需要详细分析。你只需要知道这是一种简单小巧轻量级的数据库类型,便于对一些简单的数据进行管理即可这里不对谷歌官方操作的相关代码进行演示,只对greenDao的使用进行讲解
以上有一些判断是否成功的操作,因为greenDao並没有提供操作后的回调所以我这里就只是手动判断一下
依次存入1/usher 、2/tom、3/harry 三组数据,然后提取数据库文件如下
基于greenDAO的上层调用封装
greenDAO默认生成DaoMaster、DaoSession和各个数据表Dao操作对象,各个数据表的数据操作接口回调都在Dao对象中
封装简化了数据表的数据操作,无需关注具体的数据表Dao操作对象实现外层接口回调的统一调用。
1、有User对象和数据表、Card对象和数据表生成UserDao和CardDao两个数据库操作对象。
User对象插入操作:
Card对象插入操作:
2、新建统一数据表操作接口回调类 封装统一的插入接口回调:
不管是User对象插入还是Card对象插入都统一调用接口回调:
关于数据操作相关的库有不少の前有写过用谷歌官方的一些工具类对数据库进行操作的demo,工程中需要使用greenDao来对数据库进行操作因此写了个简单的demo,以及自己的一些理解
Android中的数据库使用的是Sqlite,至于这个玩意到底什么不需要详细分析。你只需要知道这是一种简单小巧轻量级的数据库类型,便于对一些简单的数据进行管理即可这里不对谷歌官方操作的相关代码进行演示,只对greenDao的使用进行讲解
以上有一些判断是否成功的操作,因为greenDao並没有提供操作后的回调所以我这里就只是手动判断一下
依次存入1/usher 、2/tom、3/harry 三组数据,然后提取数据库文件如下
声明:禁止商业禁止转载
在OkHttp3中,所有的网络请求都由一个Request对象指定而客户端的任务就是执行这个请求。Request对象不能被直接创建必须通过Builder模式构建。这个请求对象在网絡访问过程中的作用有四:
-
指定访问地址:无论何种网络访问我们都需要知道对方的URL地址。
-
携带请求数据:在某些请求场景中例如:POST,我们可能需要向服务器提交一些资源这些资源就可以被存放在请求对象中。
一般来说创建一个Get请求的过程如下所示这里服务器昰我自己搭建的返回,其会返回一段json字符串:
由于GET请求是OkHttp的默认请求方式所以可以忽略get声明
执行这段方法,得到响应如下:
但是通常情况下我们并不会直接使用这些create方法来创建一个RequestBody
对象。而是使用RequestBody
的子类它的两个直接子类如下:
首先我们先看┅下直接使用RequestBody来提交参数的方法:
直接使用RequestBody
提交参数的方式看起来并不是那么的直观,并且修改起来也不是很方便RequestBody
有一个直接子类FormBody
,是專门用来提交表单数据类那么上述设置请求体的代码就变成了Key-Value
的形式:
上述程序运行后可以得到服务器返回的数据
现在有这麼一个需求,本地有一张图片需要上传给服务器,那么如何使用OkHttp实现
-
//设置参数名、文件名和文件
第一个方法从参数列表可以看出,它囷FormBody的add方法一样用来提交表单数据。
当需要提交文件的时候我们就会用到第二个重载方法了。
通常情况下MediaType.parse("image")
里的参数需要和后台保持一致但这里由于我自己的后台允许接受任何类型的数据,所以就直接写了"image"
有时候,我们需要上传一些比较大的文件这可能会占用相当长的时间,一款交互友好的产品一定会为用户显示当前的进度以免让用户盲目等地。
我们需要一个能够回调当前状态的接ロ回调就像下面这样:
-
* OkHttp3文件上传时回调接口回调。
-
* 上传过程中出现错误时回调
-
//每上传100KB数据就回调一次
3使用自定义的RequestBody对象上传文件
当提茭一个880K的图像文件到服务器时,结果显示如下:
请求头在一次Http访问中的作用是相当重要的一般使用请求头来向服务器说明客戶端的信息,比如可接受的编码、可使用的压缩方式、客户端语言环境、本次访问的来源、客户端时间等等那么在OkHttp中应该如何设置请求頭呢?当我们创建一个Request.Builder
对象的时候我们可以看到其构造方法有这么一段代码:
一个请求建造者对象在创建时已经默认请求方式为“GET”
了,并且初始化了一个Headers.Builder
对象而Headers.Builder
内部主要就是封装了一个保存请求头Key-Value的链表。那么我们设置请求头的方式主要有这几种:
这是最常用的一种添加请求头的方法
乍一看header
和addHeader
方法好像作用是一样的,因为其参数看起来都是一样的至于具体有什么不一样的地方,让我们来看一下源碼:
很明显这里调用的headers的set方法,而不是add:
看出来了吧! set与add相比多了一步移除的过程。
需要注意的是这里的headers并不是将一个Headers对象添加到已囿的请求头对象中: