数据库升级
在实际开发当中,我们经常要对数据库进行升级,但GreenDAO默认的DaoMaster.DevOpenHelper在进行数据升级时,会把旧表删除,然后创建新表,并没有迁移旧数据到新表中,从而造成数据丢失,所以使用greendao我们一般不会直接使用DaoMaster.DevOpenHelper,而是自己创建一个类继承DaoMaster.DevOpenHelper
,然后重写onUpgrade方法,在这个方法中使用MigrationHelper创建一个临时表,将旧表的数据迁移到一个新表中,保证缓存数据不会丢失。当然需要用自己继承。
OKhttp使用、有哪些操作,原理和源码详解?
网络请求的框架用于代替HttpurlConnection和httpclient。可以用来文件上传,下载,加载图片,网络请求,是根据build模式(将一个复杂对象的构建与它的表示分离),链式调用,每一个方法的返回值类型都是当前类的对象
优点是:
1.支持同步、异步。
2.缓存响应数据(减少了重复的网络请求)
3.自动重连(底层是Socket,有自动维护的socket连接池,减少了握手次数)
使用:
先用一个构造好的OkHttpClient和Request获取到一个Call,然后执行call的异步或者同步方法取得Response或者处理异常。
五大拦截器:
一、RetryAndFollowUpInterceptor (重定向拦截器)
1.创建 StreamAllocation对socket进行管理,比如连接复用,选择连接自动重连等
2.根据响应码做重定向和重试,重定向时如果地址不一致会释放连接,多重定向为20次,超出抛异常
二、BridgeInterceptor (桥接拦截器)
用来连接用户请求信息和HTTP请求
BridgeInterceptor 在请求阶段,补全httpheader,
在响应阶段保存Cookie
三、Cachelnterceptor(缓存拦截器)
在缓存可用的情况下,读取本地的缓存的数据,如果没有直接服务器读取数据,如果有,首先判断是否有缓存策略
,然后判断是否过期,如果没有过期,直接从缓存中读,如果过期了,你会添加一些之前的头部信息。
注意事项:
只支持GET方式,并且需要服务器配合,通过header相关的头来控制缓存
创建OkhttpClient时候需要配置Cache
四、ConnectInterceptor (连接拦截器)
主要作用是打开了与服务器的链接,正式开启了网络请求。对socket封装,判断连接是否可以重用,除了比较连接当前的host,也可以比较路由信息。最多空闲连接为5,最长空闲时间为五分钟
五、CallServerInterceptor(读写拦截器)
给服务器写数据和读取数据;写头部信息,写body表单信息等等;
它负责实现网络 IO,所有拦截器都要依赖它才能拿到响应数据。