Android OkHttp(1)
Android OkHttp(1)
OkHttp是一个流行的第三方开源网络请求框架,在目前的一些APP开发中比较流行。Android平台开源的网络请求框架不少,比如常见的Volley, AsyncHttpClient等等。
一些开发者逐渐的不再使用原先旧的AsyncHttpClient,原因很多,比如AsyncHttpClient底层的实现使用了Android旧的网路请求API,而在新版的SDK中,这些API不再被支持。同时AsyncHttpClient不支持缓存,而像Volley则支持缓存。等等各方面的对比使得OkHttp突显出来更多的优势。
OkHttp在github上的项目主页是:https://github.com/square/okhttp
我写一个简单的例子说明OkHttp的使用。
这个例子很简单,在一个布局中放一个ImageView,然后使用OkHttp对我csdn的博客头像地址发起请求,请求得到的byte组装成Bitmap,然后设置到ImageView显示出来。
布局文件很简单,就一个ImageView。从略。
Java代码:
package zhangphil.demo; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView; import java.io.IOException; import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.Callback; public class MainActivity extends AppCompatActivity { private final String image_url = "http://avatar.csdn.net/9/7/A/1_zhangphil.jpg"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //在布局里面放一个ImageView,放网络请求后的图片
final ImageView image = (ImageView) findViewById(R.id.imageView); //初始化OkHttpClient
final OkHttpClient client = new OkHttpClient(); //创建OkHttpClient针对某个url的数据请求
Request request = new Request.Builder().url(image_url).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 {
//我写的这个例子是请求一个图片
//response的body是图片的byte字节
byte[] bytes = response.body().bytes();
//response.body().close(); //把byte字节组装成图片
final Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); //回调是运行在非ui主线程,
//数据请求成功后,在主线程中更新
runOnUiThread(new Runnable() {
@Override
public void run() {
//网络图片请求成功,更新到主线程的ImageView
image.setImageBitmap(bmp);
}
});
}
});
}
}
本例使用OkHttp从一个URL下载图片数据然后装配成Bitmap设置到ImageView里面,其实如果仅仅是从一个URL加载图片,则可以考虑使用Glide(见附录文章2),Glide内部使用了缓存,不像本例的OkHttp那样,没有使用缓存,Glide使用缓存,如果一个URL下载的图片成功,再次请求就从缓存中读取而不是重复浪费计算资源再次请求图片。
附录文章:
1,《Android第三方异步网路加载库AsyncHttpClient内部实现缓存策略了吗?》链接地址:http://blog.csdn.net/zhangphil/article/details/48595817
2,《Android图片加载与缓存开源框架:Android Glide》链接:http://blog.csdn.net/zhangphil/article/details/45535693
Android OkHttp(1)的更多相关文章
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- 【转】android Graphics(四):canvas变换与操作
android Graphics(四):canvas变换与操作 分类: 5.andriod开发2014-09-05 15:05 5877人阅读 评论(18) 收藏 举报 目录(?)[+] 前言 ...
- android模拟器(genymotion)+appium+python 框架执行基本原理(目前公司自己写的)
android模拟器(genymotion)+appium+python 框架执行的基本过程: 1.Push.initDate(openid)方法 //业务数据初始化 1.1 v5db.p ...
- android安全问题(八)伪造短信(利用原生android4.0漏洞)
导读:本文利用android4.0的一个原生漏洞来伪造短信.无须声明任何权限即可伪造发送方为任何号码的短信给用户. android4.0发布已经是很久很久很久很久以前的事情了,这个漏洞早就报了出来,之 ...
- Android - 硬件抽象层(HAL)
以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...
- 【转】android电池(五):电池 充电IC(PM2301)驱动分析篇
关键词:android 电池 电量计 PL2301任务初始化宏 power_supply 中断线程化 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 ...
- 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇
关键词:android 电池 电量计 MAX17040 任务初始化宏 power_supply 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台: ...
- 【转】android 电池(三):android电池系统
关键词:android电池系统电池系统架构 uevent power_supply驱动 平台信息: 内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV3 ...
随机推荐
- Java多线程学习---------超详细总结(java 多线程 同步 数据传递 )
目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么 ...
- Webform 内置对象 Response对象、Request对象,QueryString
Request对象:获取请求Request["key"]来获取传递过来的值 QueryString:地址栏数据传递 ?key=value&key=value注意事项:不需要 ...
- 使用Jquery1.9 版本 来实现全选
在使用Jquery实现全选以及反选的时候, 使用attr()实现的时候,在浏览器第一次运行可以全选,但是第二次再全选,不管用. 通过查找资料,用 prop()方法代替attr()方法就行了. 注意: ...
- spring 配置 shiro rememberMe
1.shiro 提供记住我的功能,当将form表单中name="rememberMe" 的value设为true或者登陆的token中.token.setRememberMe(tr ...
- qt查找框设置
转载请注明出处:http://www.cnblogs.com/dachen408/p/7229129.html 主界面弹出查找框方法,查找框显示在主界面上层,并还可以点击主界面,非模态. class ...
- ubuntu服务器建立apache虚拟主机
启用与停用站点的方法 a2ensite 站点名 a2dissite 站点名 基于名字的(通过域名来区分)的虚拟主机 安装好apache以后默认有一个叫default的虚拟主机.新建虚拟主机时可以直接复 ...
- 恩智浦Freescale Cortex-A9 迅为IMX6开发板平台初体验
iTOP-i.MX6 开发板预装 Android4.4 系统,采用 9.7 寸(或者 7 寸或者 4.3 寸)IPS 屏 幕,至少 5 点以上触控,操作流畅,无论是高清视频.游戏等都会有上佳的表现,实 ...
- Swift 性能相关
起初的疑问源自于「在 Swift 中的, Struct:Protocol 比 抽象类 好在哪里?」.但是找来找去都是 Swift 性能相关的东西.整理了点笔记,供大家可以参考一下. 一些疑问 在正题开 ...
- 第1节 hive安装:2、3、4、5、(多看几遍)
第1节 hive安装: 2.数据仓库的基本概念: 3.hive的基本介绍: 4.hive的基本架构以及与hadoop的关系以及RDBMS的对比等 5.hive的安装之(使用mysql作为元数据信息存储 ...
- 数据库中的Schema是什么?
在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式.模式中包含了schema对象 ...