Android OkHttp(1)

简介: Android OkHttp(1)OkHttp是一个流行的第三方开源网络请求框架,在目前的一些APP开发中比较流行。


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


相关文章
|
5月前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
167 0
|
5月前
|
XML JSON Java
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
207 0
|
5月前
|
缓存 JSON Android开发
[Android]网络框架之OkHttp(详细)(kotlin)
[Android]网络框架之OkHttp(详细)(kotlin)
181 0
|
5月前
|
XML JSON Java
Android App网络通信中利用okhttp实现下拉刷新和上拉加载实战(抓取文章信息 超详细 附源码)
Android App网络通信中利用okhttp实现下拉刷新和上拉加载实战(抓取文章信息 超详细 附源码)
31 0
|
9月前
|
API Android开发 开发者
Android 中Okhttp的同步请求与异步请求详解
Android 中Okhttp的同步请求与异步请求详解
273 0
|
11月前
|
Android开发
Android Retrofit,Gson,Okhttp混淆
Android Retrofit,Gson,Okhttp混淆
324 0
|
存储 设计模式 缓存
Android体系课 之 OkHttp你想知道的都在这里了--
开发过程中经常需要使用到网络请求,而OkHttp作为第一代网络框架,经久不衰,在众多框架中脱颖而出,且在近期已被谷歌官方推荐使用,一定有其原因:
|
XML JSON 数据安全/隐私保护
Android学习:OkHttp进行网络请求等
OkHttp是一个优秀的网络请求框架,主要介绍介绍OkHttp的Get请求、Post请求、上传下载文件、 上传下载图片等功能。
|
缓存 Java 开发工具
Android开发之OkHttp介绍
Android开发之OkHttp介绍
149 0
Android开发之OkHttp介绍
|
XML 缓存 JSON
Android OkHttp+Retrofit+RxJava搭建网络访问框架(含源码)
Android OkHttp+Retrofit+RxJava搭建网络访问框架(含源码)
680 0
Android OkHttp+Retrofit+RxJava搭建网络访问框架(含源码)