Android Coding
简述
使用 okhttp 很长时间了,但一直没时间弄懂其中各种奥妙。上周相对空闲,于是阅读了 okhttp 源码,准备写写笔记。习惯写笔记时,写写比较核心的 demo 代码,想起前阵子朋友使用 github 的 rest api v3 开放接口实现了评论系统 comment.js
,于是 demo 代码中的网络请求就试试 github 的 rest api v3 开放接口。又因为之前也实现过类似 coding 一样的功能,一发不可收拾,便实现一个可关注动态,下载源码,查看文档和查看代码的 coding ,本文是 coding 的分享笔记,以后再做 okhttp 源码笔记。
开放接口
: https://developer.github.com/v3/
项目地址
: https://github.com/4ndroidev/Coding
下载样例
: http://fir.im/hb1w
如果你的项目想集成该功能,拷贝 coding 代码后,像 sample 一样,添加一行代码即可。
声明:感谢真coding,此假coding使用了真coding开源代码中的3个html和一些图标
效果
代码结构
项目依赖
coding 使用了一些热门库:
此外,项目使用了lambda
表达式结合rxjava
,使用假mvp
结构(后续说明),代码比较简洁
目录结构
|
|
mvp结构
假
mvp
,这里没有像view
层和presenter
层定义成接口存于一个contract
类中。becauseview
层和presenter
层目前都只有单一实现,无需定义成接口,方便定位问题。老实说,个人认为不应随便定义接口,项目大了后容易出现混乱,接口最好在多态或回调时定义,尽可能减少单一实现的接口定义,maybe 这是个歪理。
|
|
开发题纲
- 定义请求接口,创建 retrofit 对象
- 编写 view 和 presenter,实现查阅功能
- 实现 oauth 授权功能,增大访问限制
请求接口定义
github rest api v3 支持挺丰富的,而目前需要的信息: repo, commit, tree 和 blob,其他以后再关注。
在定义接口时,往往需要知道实体类内容,可以直接到https://developer.github.com/v3/
找相关 json 格式,或自行在浏览器中发起请求。实体类可以通过 Android Studio 的 GsonFormat 插件直接生成。
定义请求接口代码
|
|
创建 retrofit 对象代码
|
|
view & presenter
mvp 目前比较热门,将业务逻辑从 view 层抽离到 presenter 中才处理,presenter 作为中间层,联系 model 和 view, view 不会对 model 写数据,只会读取 model 数据进行展示。这样一方面代码相对清晰,另一方面更便于维护。
view 层代码中,如大部分 app 一样,coding 使用 recyclerview 展示列表数据,实现下拉刷新和上拉加载更多功能。coding 中使用 recyclerview 的地方包括 commit 列表,diff 列表和代码目录;coding 的代码展示和 markdown 展示,读取本地 html 模板和拉取网络内容进行合并,再用 webview 加载。
presenter 层代码中,使用 retrofit 结合 rxjava,配合 lambda 表达式,如英雄联盟界的大司马老师说:舒服!
以下将贴一下 commit 列表 和 代码展示 进行举例
commit 列表
com/androidev/coding/module/commit/CommitsActivity.java
|
|
com/androidev/coding/module/commit/CommitsPresenter.java
|
|
代码展示
com/androidev/coding/module/code/CodeActivity.java
|
|
com/androidev/coding/module/code/CodePresenter.java
|
|
oauth 授权
github rest api v3 有访问限制,https://developer.github.com/v3/#rate-limiting
;短时间内,同一个 ip 访问开放接口的次数不大于60次。然而用户通过 oauth 进行登录授权,即可访问次数即可增大至5000次,够大方的,amazing!
github oauth 文档 : 点我查阅
完成整个 oauth 授权,需要以下步骤:
- 注册 oauth 应用
- 登录授权,获取 access_token
- 使用 access_token 进行请求访问
1. 注册 oauth 应用
官方图文步骤 : 点我查阅
注册流程
注册结果
2. 登录获取 access_token
使用 webview 加载登录页面,登录完会重定向至第一步填写的 Authorization callback URL 并拼接上了 code 参数,接下来,使用 code, client id 以及 client secret 获取 access_token;在这里,遇到个巨坑,貌似 Android 5.0.2 的 user-agent 被 github 拉黑了,授权时提示不再支持你的浏览器,于是随便设置了其他 user-agent 便没问题。
|
|
3. 使用 access_token 进行请求
github 推介将 access_token 作为名为 Authorization 的请求头,因此可以直接给 okhttpclient 设置拦截器,拦截器代码如下:
|
|
总结
使用 github-rest-api-v3 进行练手还是挺舒服的,同时可以练习 retrofit, rxjava等框架代码。okhttp 代码至今也学习了些知识,后续会做些通俗易懂的分享。