Android 框架学习之 第一天 okhttp & Retrofit
最近面试,一直被问道新技术新框架,这块是短板,慢慢补吧。
关于框架的学习,分几个步骤
I.框架的使用
II.框架主流使用的版本和Android对应的版本
III.框架的衍生使用比如okhttp就会有Retrofit的使用
IV.框架历史版本,已经每个版本解决的问题
V.框架源码的分析
VI.框架设计思想,优缺点,如何解决。
第一天(20160919):
计划:
okhttp 的使用
okhttp 的主流版本和对应android版本
okhttp对应的retrofit的框架使用。
okhttp:
GitHub地址:
https://github.com/square/okhttp
I.OKHttp的使用。
下面是OKhttp的使用过程。
public class OkhttpRequestManagerImpl extends NetworkRequestBaseManager {
OkHttpClient client = null;
CallBackListener callBackListener = null;
@Override
public void initManager(NetWorkResponse response) {
super.initManager(response);
client = new OkHttpClient();
callBackListener = new CallBackListener();
}
@Override
public void release() {
super.release();
callBackListener = null;
client = null;
}
@Override
public void requestHttp(int method, String hostUrl, String methodUrl) {
String url = hostUrl+methodUrl;
final Request request = new okhttp3.Request.Builder().url(url)
.addHeader("Accept", "application/json")
.build();
Call call = client.newCall(request);
call.enqueue(callBackListener);
}
class CallBackListener implements okhttp3.Callback{
@Override
public void onFailure(Call call, IOException e) {
deliverFailure(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
deliverSuccess(response.body().string());
}
}
}
一个简单的使用过程如上代码。
post请求:
@Override
public void requestHttp(int method, String hostUrl, String methodUrl, Map<String,String> map) {
switch(method)
{
case METHOD_GET:
requestGet(hostUrl, methodUrl);
break;
case METHOD_POST:
requestPost(hostUrl,methodUrl,map);
break;
} } private void requestPost(String hostUrl, String methodUrl, Map<String, String> map) {
try {
String url = hostUrl + methodUrl;
StringBuilder tempParams = new StringBuilder();
int pos = 0;
for (String key : map.keySet()) {
if (pos > 0) {
tempParams.append("&");
}
tempParams.append(String.format("%s=%s", key, URLEncoder.encode(map.get(key), "utf-8")));
pos++;
}
String params = tempParams.toString();
RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, params);
final Request request = new Request.Builder().url(url)
.post(body)
.build();
Call call = client.newCall(request);
call.enqueue(callBackListener);
}catch (Exception e)
{
deliverFailure(e.getMessage());
}
} private void requestGet(String hostUrl, String methodUrl) {
String url = hostUrl+methodUrl;
final Request request = new Request.Builder().url(url)
.addHeader("Accept", "application/json")
.get()
.build();
Call call = client.newCall(request);
call.enqueue(callBackListener);
}
II.OKHttp 功能
Android 框架学习之 第一天 okhttp & Retrofit的更多相关文章
- struts2框架学习之第一天
day01 Struts2概述 1 什么是框架 试想一下,人与人之间不同之处多,还是相同之处多呢?当然是相同之处多,不同之处少!人都有头,而且头都在脖子上面! 软件之间也是相同之处多,不同之处少,框架 ...
- Android 框架学习1:EventBus 3.0 的特点与如何使用
前面总结了几篇基础,在这过程中看着别人分享自定义 View.架构或者源码分析,看起来比我写的"高大上"多了,内心也有点小波动. 但是自己的水平自己清楚,基础不扎实画再多源码流程图也 ...
- Android 框架学习3:从 EventBus 中学到的精华
关联文章: EventBus 3.0 的特点与如何使用 源码分析 EventBus 3.0 如何实现事件总线 学习的目的是为了超越,经过前面对 EventBus 3.0 的学习,我们已经对它相当熟悉了 ...
- Android 框架学习2:源码分析 EventBus 3.0 如何实现事件总线
Go beyond yourself rather than beyond others. 上篇文章 深入理解 EventBus 3.0 之使用篇 我们了解了 EventBus 的特性以及如何使用,这 ...
- Python-Django框架学习笔记——第一课:Hello World
Python Django 有诗云: 孤山寺北贾亭西,水面初平云脚低. 几处早莺争暖树,谁家新燕啄春泥. 乱花渐欲迷人眼,浅草才能没马蹄. 最爱湖东行不足,绿杨阴里白沙堤. 今天在信阳游玩,有幸来到信 ...
- Android NDK学习之第一个实例---端口扫描
为什么要写一个端口扫描的程序,Java来写不是很方便吗?因为我也没有想到什么例子能够方便的来练习.于是想到以前找到的端口扫描的C代码,于是想用他们来练习.扫描服务端端口的方式有许多种,最简单的就是直接 ...
- ASP.NET MVC5的一个轻量级的框架学习的第一天
第二步第三部 这是第一天的小试成功,怪自己太笨了,一个错排查好久,还好有源码看着了解,后续还得多努力,
- 【Android - 框架】之OkHttp的使用
OkHttp是一个非常优秀的网络访问框架,当下非常火的Retrofit的底层就是使用OkHttp进行封装的.接下来介绍以下OkHttp的简单使用. 1.导入依赖 在Android Studio中,在M ...
- 【Android - 框架】之Retrofit+RxJava的使用
前几天分别对Retrofit和RxJava进行了总结,这个帖子打算把Retrofit结合RxJava使用的方法总结以下.有还不了解Retrofit或RxJava的朋友可以参考下面的帖子学习~ [And ...
随机推荐
- MySQL学习笔记九:存储过程,存储函数,触发器
存储过程 1.存储过程由一组特定功能的SQL语句组成,对于大型应用程序优势较大,相对不使用存储过程,具有以下优点: a.性能提高,因为存储过程是预编译的,只需编译一次,以后调用就不须再编译 b.重用性 ...
- JQuery EasyUI datagrid 复杂表头处理
下面是我项目中和网上收集的EasyUI的表头处理的,合适的拿去用吧. 例子1: $('#day_health').datagrid({ url: "sqb_b ...
- Oracle常用函数
前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...
- DevExpress控件安装、汉化使用教程
前言 DevExpress是一个庞大的控件库,也很是好用(没用过,听说),但是要收费. 网上关于DevExpress的教程满天飞,我找了一下午也没找到正确的安装.简单实用教程,还是自己摸索吧. 自己动 ...
- 项目中遇到的Integer问题--转
Integer类型值相等或不等分析 http://www.cnblogs.com/zzllx/p/5778470.html 看到博客园一位博友写的面试问题,其中一题是 Integer a = 1; I ...
- CSS3的flex布局
flex的一些属性 CSS3中引入了另一种框--flexbox,flexbox有一些block和inline不同的性质,比如: 自适应子元素(flex item,又称伸缩项目)的宽度 伸缩项目的flo ...
- Oracle并行添加主键的方法
环境:Oracle 11.2.0.3 需求:生产一张表由于前期设计不当,没有主键.现需要添加主键,数据量很大,想并行建立. 1.直接添加,提示ora-3001:未实施的功能;只能单线程建立主键 S ...
- 探秘Tomcat——启动篇
tomcat作为一款web服务器本身很复杂,代码量也很大,但是模块化很强,最核心的模块还是连接器Connector和容器Container.具体请看下图: 从图中可以看出 a. 高亮的两块是Conne ...
- Ubuntu下搭建ryu环境
RYU环境搭建总共四步: step1:首先下载相应的python套件,并且更新pip $ sudo apt-get install python-pip python-dev build-essent ...
- 多个 App 间启动
http://developer.nokia.com/: URI associations for Windows Phone http://msdn.microsoft.com/: Auto-lau ...