zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    Win7 usb无法识别,感叹号,没有盘符
    MVMM 中的ViewModel 实现IsLoading进度条
    菜鸟喜欢的C# 入门认识和添加,修改,删除 文件夹 文件 大全(转)
    (转)windows负载平衡
    关于刷新页面和用法.(转)
    bat文件调用dos命令 (dos淘金)
    flash新闻轮转:图片和链接从数据库读取之我见
    dling 624+and 2100ap && wireless card&wifi
    html与css小技巧
    小型系统数据库安全小结
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6147284.html
Copyright © 2011-2022 走看看