OkHttp是一个非常优秀的网络访问框架,当下非常火的Retrofit的底层就是使用OkHttp进行封装的。接下来介绍以下OkHttp的简单使用。

1、导入依赖

  在Android Studio中,在Module的build.gradle文件中导入以下依赖:

    compile 'com.squareup.okhttp3:okhttp:3.4.2'
compile 'com.squareup.okio:okio:1.11.0'

2、代码编写

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView; import org.json.JSONException;
import org.json.JSONObject; import java.io.IOException; import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response; public class MainActivity extends AppCompatActivity {
private static final String URL = "https://api.github.com/users/basil2style"; private TextView tv; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
} @Override
protected void onResume() {
super.onResume();
// okhttGet();
okhttpPost();
} /**
* GET请求
*/
private void okhttGet() {
// 创建OkHttpCliend对象
OkHttpClient client = new OkHttpClient();
// 创建一个Request
Request request = new Request.Builder()
.url(URL)
.build();
// call
Call call = client.newCall(request);
// 请求加入调度(异步)
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 请求失败时回调的方法
} @Override
public void onResponse(Call call, Response response) throws IOException {
// 请求成功时回调的方法
final String result = response.body().string();
// 在主线程中更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
setTextToTextView(result);
}
});
}
});
} /**
* POST请求
*/
private void okhttpPost() {
OkHttpClient client = new OkHttpClient();
// FormBody.Builder builder = new FormBody.Builder();
// builder.add("username", "ITGungnir");
Request request = new Request.Builder()
.url(URL)
// .post(builder.build())
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 请求失败时回调的方法
} @Override
public void onResponse(Call call, Response response) throws IOException {
// 请求成功时回调的方法
final String result = response.body().string();
// 在主线程中更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
setTextToTextView(result);
}
});
}
});
} /**
* 通过返回结果获取要展示在TextView中的文本信息
*/
private void setTextToTextView(String data) {
try {
JSONObject parent = new JSONObject(data);
StringBuffer sb = new StringBuffer();
sb.append("type: " + parent.getString("type") + "\n");
sb.append("id: " + parent.getInt("id") + "\n");
sb.append("name: " + parent.getString("name") + "\n");
sb.append("location: " + parent.getString("location") + "\n");
sb.append("blog: " + parent.getString("blog") + "\n");
sb.append("email: " + parent.getString("email"));
tv.setText(sb.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}

3、OkHttp原理

            

(1)当创建同步请求或异步请求时,如果此时拦截器链(请求队列)中没有请求,则直接进行网络请求;如果此时请求队列中已经有请求,则将请求添加到请求队列中。请求队列负责调度请求,将请求一个一个取出进行处理。

(2)HttpEngine负责发起请求,发起请求后先去缓存中查找有没有缓存,如果有,则直接从缓存中取出数据;如果缓存中没有,则开始准备从网络获取数据。

(3)OkHttp内部维护了一个网络连接池ConnectionPool,维护了一些网络请求,保证网络请求的循环利用。

(4)从ConnectionPool中取出一个请求对象,访问网络,获取访问结果Response并进行处理。

4、OkHttp封装

以下是鸿洋大神封装的一个OkHttp操作工具框架,其封装了:

  • 一般的get请求
  • 一般的post请求
  • 基于Http Post的文件上传(类似表单)
  • 文件下载/加载图片
  • 上传下载的进度回调
  • 支持取消某个请求
  • 支持自定义Callback
  • 支持HEAD、DELETE、PATCH、PUT
  • 支持session的保持
  • 支持自签名网站https的访问,提供方法设置下证书就行

详情请访问GitHub地址:【OkHttp-Utils】

【Android - 框架】之OkHttp的使用的更多相关文章

  1. android 开发 - 使用okhttp框架封装的开发框架

    概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 ...

  2. Android 开发 框架系列 OkHttp拦截器

    前言 此篇博客只讲解okhttp的拦截器功能的详细使用,如果你还不太了解okhttp可以参考我另外一篇博客 Android 开发 框架系列 OkHttp使用详解 添加Interceptor的简单例子 ...

  3. 一个C#开发搭建Android框架的心路历程

    前言 Java框架实在是太多了,因为是初学乍练,所以,只好以百度为标准选择框架了. Java的框架文章太难写了,因为他引用了太多框架,而没一个框架都有很繁琐的配置,把每个框架都写一遍,就等于写书了:所 ...

  4. Android 框架简介--Java环境(转)

    ==========================上=========================== 这里简单的介绍了Android的java环境基础,在后面一节中会结合具体的实例来理解这一节 ...

  5. 【Android - 框架】之GreenDao的使用

    上一篇博客([Android - 框架]之ORMLite的使用)中介绍了ORMLite的基本使用,今天我们来研究以下GreenDao的使用. GreenDao和ORMLite一样,都是基于ORM(Ob ...

  6. 【Android - 框架】之Retrofit+RxJava的使用

    前几天分别对Retrofit和RxJava进行了总结,这个帖子打算把Retrofit结合RxJava使用的方法总结以下.有还不了解Retrofit或RxJava的朋友可以参考下面的帖子学习~ [And ...

  7. IOS 与ANDROID框架及应用开发模式对照一

    IOS 和ANDROID操作系统都是眼下流行的移动操作系统,被移动终端和智能设备大量採用,两者都採用了先进的软件技术进行设计,为了方便应用开发两者都採用了先进的设计模式. 两者在框架设计上都採用了什么 ...

  8. Kotlin的扩展函数:扩展Android框架(KAD 08)

    作者:Antonio Leiva 时间:Jan 11, 2017 原文链接:https://antonioleiva.com/extension-functions-kotlin/ 扩展函数是Kotl ...

  9. App 组件化/模块化之路——Android 框架组件(Android Architecture Components)使用指南

    面对越来越复杂的 App 需求,Google 官方发布了Android 框架组件库(Android Architecture Components ).为开发者更好的开发 App 提供了非常好的样本. ...

  10. Https系列之四:https的SSL证书在Android端基于okhttp,Retrofit的使用

    Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...

随机推荐

  1. mysql 刘道成视频教程 第4-8课 --- 数据类型

    数据类型大纲图: 注:在mysql中,输入时,除了数值型,不要加单引号,其他的都要加上单引号,养成一种好习惯. 一.数值型: 整数型: 1)从数学上来讨论tinyint 1. 占据空间 2.存储范围 ...

  2. shell命令:echo命令详解

    功能说明:显示文字. 语 法:echo [-ne][字符串] / echo [--help][--version] 补充说明:echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开, 并在 ...

  3. Ubuntu 源

    原文地址: Ubuntu 12.04添加源 sudo vim /etc/apt/sources.list #网易163 deb http://mirrors.163.com/ubuntu/ preci ...

  4. [C#学习]在多线程中如何调用Winform[转]

    问题的产生: 我的WinForm程序中有一个用于更新主窗口的工作线程(worker thread),但文档中却提示我不能在多线程中调用这个form(为什么?),而事实上我在调用时程序常常会崩掉.请问如 ...

  5. 常用css表达式-最小宽度-上下居中

    /* IE6下最小宽度的CSS表达式 */ width:100%; min-width:1024px; _width:expression((document.documentElement.clie ...

  6. 安装ImageMagick扩展出现configure: error: not found. Please provide a path to MagickWand-config or Wand- config program

    安装ImageMagick扩展报错: checking ImageMagick MagickWand API configuration program... checking Testing /u ...

  7. 谈memcache和memcached的区别

    用了段时间的memcache和memcached总结下认识,看很多人在用cache的时候,刚刚都没有搞清楚memcache 和 memcached的区别,还有就是使用的时候基本都是 get/set   ...

  8. 使用jQuery播放/暂停 HTML5视频

    文章来自:http://blog.okbase.net/jquery2000/archive/4485.html 我尝试用jQuery控制HTML5视频,两个视频分别在两个tab中,我希望点中tab后 ...

  9. 虚拟机linux下使用cuteftp

    操作系统  redhat9.0 一.主机配置 1.查看主机是否安装了ftp服务器,如果没有,安装它 在终端上输入setup,在弹出的界面中选择system services.查看弹出的界面中是否有vs ...

  10. [BZOJ 1011] [HNOI2008] 遥远的行星 【近似解】

    题目链接: BZOJ - 1011 题目分析 这道题的特别之处在于,答案可以有5%的误差. 嗯..So? 我还是不会,于是看题解. 神犇的题解就是利用这误差范围求一个近似解. 怎么求近似解呢?假如 g ...