一、OKHttp
OK get 异步请求
①获取ok对象
②获取request对象
③获取call对象
④call执行请求
ok post异步请求
①获取ok对象
②创建请求体
③获取request对象
④获取call对象
⑤call执行请求
请求体
①string:RequestBody.create(type,"");
②stream:new RequestBody()
③form:FormBody.builder().build();
④file
请求头、缓存、超时
请求头:reques.header() request.addHeader()
缓存:okHttpClient.cacha(new Cache(file,time))
超时:ok.timeout()
二、Retrofit
retrofit使用步骤
①创建接口服务类:baseURL和方法,添加依赖
②创建retrofit对象
③通过retrofit对象获取接口服务对象
④接口服务对象调用自己的方法
⑤通过call执行请求
retrofit常用注解
请求方式:
@GET GET请求
@POST POST请求
请求头:
@Headers("K:V") 添加请求头,作用于方法
@Header("K") 添加请求头,参数添加头
@FormUrlEncoded 用表单数据提交,搭配参数使用
请求参数:
@Query 替代参数值,通常是结合get请求的
请求路径:
@Path 替换路径
@Url 路径拼接
@QueryMap替代参数值,通常是结合get请求的
请求体:
@Body(RequestBody)设置请求体,是结合post请求的
注解代码:
String baseUrl="http://www.qubaobei.com/ios/cf/";
@GET("dish_list.php?stage_id=1&limit=20&page=1")
Call<ResponseBody> get1();
@GET("dish_list.php")
Call<ResponseBody> get2(@Query("stage_id") String stage_id, @Query("limit") String limit, @Query("page") String page);
@GET("dish_list.php")
Call<ResponseBody> get3(@QueryMap Map<String, String> map);
@POST("dish_list.php")
@FormUrlEncoded
Call<ResponseBody> post1(@Field("stage_id") String stage_id, @Field("limit") String limit, @Field("page") String page);
@POST("dish_list.php")
@FormUrlEncoded
Call<ResponseBody> post2(@FieldMap Map<String, String> map);
@POST("dish_list.php")
@Headers("Content-Type:application/x-www-form-urlencoded")
Call<ResponseBody> post3(@Body RequestBody requestBody);
@GET("dish_list.php?stage_id=1&limit=20&page=1")
Call<FoodBean> get4();
@GET
Call<FoodBean> get5(@Url() String url);
@GET
Call<FoodBean> get6(@Url() String url, @Query("stage_id") String stage_id, @Query("limit") String limit, @Query("page") String page);
@GET("{dish_list}.php?stage_id=1&limit=20&page=1")
Call<FoodBean> get7(@Path("dish_list") String dish_list);
@POST("dish_list.php")
@Headers("Content-Type:application/json")
Call<ResponseBody> post4(@Body RequestBody requestBody);
@POST
Call<ResponseBody> post5(@Url String url, @Body RequestBody requestBody, @Header("Content-Type")String type);
三,GreenDao
1,Greendao配置
2,123
3,双检锁单例模式:得到表对象
public static DbUser getInstance() {
if (ourInstance==null){
synchronized (DbUser.class){
if (ourInstance==null){
ourInstance=new DbUser();
}
}
}
return ourInstance;
}
private DbUser() {
DaoMaster.DevOpenHelper devOpenHelper =new DaoMaster.DevOpenHelper(BaseApp.getApp(),"dao.db");
DaoMaster daoMaster =new DaoMaster(devOpenHelper.getWritableDb());
DaoSession daoSession = daoMaster.newSession();
dataBeanDao = daoSession.getDataBeanDao();
}
4,获取整个App的上下文,使用Greendao实现增删改查
// 添加代码仓库 步骤1
mavenCentral()
//greenDao生产代码插件 步骤2
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
// apply plugin 步骤3
apply plugin: 'org.greenrobot.greendao'
//greenDAO配置 步骤4
implementation 'org.greenrobot:greendao:3.2.2' // add library
implementation 'org.greenrobot:greendao-generator:3.2.2'
//greendao配置 步骤5
在buildTypes下面添加
greendao {
//数据库版本号,升级时修改
schemaVersion 1
//生成的DAO,DaoMaster和DaoSession的包路径。默认与表实体所在的包路径相同
daoPackage 'com.example.xts.greendaodemo.db'
//生成源文件的路径。默认源文件目录是在build目录中的(build/generated/source/greendao)
targetGenDir 'src/main/java'
}
3.收藏项目
①添加依赖、权限
②配置数据库123,提供全局上下文,创建数据库工具类
③TVF
④实现首页功能:retrofit实现网络请求、点击事件、插入数据
⑤实现收藏功能:查询数据库、删除数据、viewpager结合fragment实现懒加载
四、Rxjava
1.观察者模式
定义:
定义对象间一对多的依赖依赖关系,当一个对象改变状态时,所有依赖它的对象会收到通知并自动更新。
理解:
其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。属于行为型设计模式的一种。
使用场景:
有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。其中,客户是观察者,公众号是被观察者。
2.什么是RxJava(ReactiveX.io链式编程)
定义:一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。
总结:RxJava 是一个 基于事件流、实现异步操作的库
理解:RXJava是一个响应式编程框架 ,采用观察者设计模式,观察者模式本身的目的就是『后台处理,前台回调』的异步机制
优点:
由于 RxJava是基于事件流的链式调用,所以使得 RxJava:
逻辑简洁
实现优雅
使用简单
作用:
实现异步操作
类似于 Android中的 AsyncTask 、Handler作用
3.Rxjava基本概念(观察者模式)
案例:按钮点击处理、广播注册
通过setOnClickListener()方法,Button持有OnClickListener的引用;当用户击时,Button自动调用OnClickListener的onClick()方法。
Button——>被观察者
OnClickListener——>观察者
setOnClickListener ——>订阅
onClick ——>事件
4. RxJava 有3个基本概念及原理
1.Observable(被观察者)
2.Observer(观察者)
3.subscribe(订阅)事件。
原理:被观察者(Observable)通过 订阅(Subscribe)按顺序发送事件 给观察者(Observer), 观察者(Observer)按顺序接收事件 & 作出对应的响应动作。
普通事件 : onNext() 接收被观察者发送的消息
特殊的事件:
onCompleted() 事件队列完结
onError () 事件队列异常
5.调度器
subscribeOn():或者叫做事件产生的线程。 指定subscribe()所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。observeOn():或者叫做事件消费的线程。指定 Subscriber所运行在的线程。
五.BroadcastReceiver
1 . 定义
即 广播,是一个全局的监听器,属于Android四大组件之一
Android 广播分为两个角色:广播发送者、广播接收者
2. 作用
监听 / 接收 应用 App 发出的广播消息,并做出响应
3. 应用场景
Android不同组件间的通信(含 :应用内 / 不同应用之间)
多线程通信
与 Android 系统在特定情况下的通信
如:电话呼入时、网络可用时
4. 实现原理
4.1 采用的模型
Android中的广播使用了设计模式中的观察者模式:基于消息的发布 / 订阅事件模型
因此,Android将广播的发送者 和 接收者 解耦,使得系统方便集成,更易扩展
4.2 模型讲解
模型中有3个角色:
消息订阅者(广播接收者)
消息发布者(广播发布者)
消息中心(AMS,即Activity Manager Service)
5.广播接收器注册
注册的方式分为两种:静态注册、动态注册
①. 静态注册
注册方式:在AndroidManifest.xml里通过<receive>标签声明
②. 动态注册
注册方式:在代码中调用Context.registerReceiver()方法