Okhttp和Picasso配合使用
来源:互联网 发布:霓虹灯效果图制作软件 编辑:程序博客网 时间:2024/05/22 10:54
Okhttp直接使用大神鸿洋的封装,链接http://blog.csdn.net/lmj623565791/article/details/49734867
步骤:
一,引用okhttp包、鸿洋的okhttputils包,以及即将用到的picasso包。
二,配置属于自己的okhttp。
public class MyApplication extends Application { private static Context mApplicationContext; @Override public void onCreate() { super.onCreate(); mApplicationContext=getApplicationContext(); initOkHttpUtils(); initPicasso(); } /** * 可以在此处配置自己需要的配置,默认为鸿洋的配置 */ private void initOkHttpUtils() {// OkHttpClient okHttpClient = new OkHttpClient.Builder().build();// OkHttpUtils.initClient(okHttpClient); } /** * 初始化单例Picasso对象 */ private void initPicasso() { //配置Picasso Picasso picasso = new Picasso.Builder(this) //设置内存缓存大小,10M .memoryCache(new LruCache(10 << 20)) //下载图片的格式,这样可以节省一半的内存 .defaultBitmapConfig(Bitmap.Config.RGB_565) //配置下载器,这里用的是OkHttp,必需单独加OkHttp,同时设置了磁盘缓存的位置和大小 //.downloader(new UrlConnectionDownloader()) .downloader(new MyImageDownloader(getCacheDir(), 20 << 20)) //设置图片左上角的标记 //红色:代表从网络下载的图片 //蓝色:代表从磁盘缓存加载的图片 //绿色:代表从内存中加载的图片 .indicatorsEnabled(true) //.loggingEnabled(true) .build(); Picasso.setSingletonInstance(picasso); }}
三,在图片需要网络获取的时候,让picasso关联okhttp。
四,参考OkHttpDownloader类自定义属于自己的OkHttpDownloader。
1、实现Downloader接口,重写load和shutdown方法,没有特殊需求则直接复制OkHttpDownloader中的load和shutdown方法
从上图可以发现client报红,这个client正应该是我们自定义的okhttpclient。
2、定义OkHttpClient成员变量,并在构造方法中初始化为自定义的okhttpclient。
private final OkHttpClient client; public Down() { this.client = OkHttpUtils.getInstance().getOkHttpClient(); }
3、重载构造方法,使Okhttp可以缓存图片。
public Down(final File cacheDir, final long maxSize) { this.client = OkHttpUtils.getInstance().getOkHttpClient(); try { client.newBuilder().cache(new okhttp3.Cache(cacheDir,maxSize)).build(); } catch (Exception ignored) { } }
4、提取一下公共代码
private static OkHttpClient defaultOkHttpClient() { OkHttpClient client = OkHttpUtils.getInstance().getOkHttpClient(); Log.d("MyOKHttpDownloader", "---->defaultOkHttpClient(): " + client.toString()); return client; } private final OkHttpClient client; public Down(final File cacheDir, final long maxSize) { this(defaultOkHttpClient()); try { client.newBuilder().cache(new okhttp3.Cache(cacheDir,maxSize)).build(); } catch (Exception ignored) { } } public Down(OkHttpClient client) { this.client = client; }
5、最后整个MyImageDownloader类代码如下:
public class MyImageDownloader implements Downloader { private static OkHttpClient defaultOkHttpClient() { OkHttpClient client = OkHttpUtils.getInstance().getOkHttpClient(); Log.d("MyOKHttpDownloader", "---->defaultOkHttpClient(): " + client.toString()); return client; } private final OkHttpClient client; public MyImageDownloader(final File cacheDir, final long maxSize) { this(defaultOkHttpClient()); try { client.newBuilder().cache(new okhttp3.Cache(cacheDir,maxSize)).build(); } catch (Exception ignored) { } } public MyImageDownloader(OkHttpClient client) { this.client = client; } protected final OkHttpClient getClient() { return client; } @Override public Response load(Uri uri, int networkPolicy) throws IOException { CacheControl cacheControl = null; if (networkPolicy != 0) { if (NetworkPolicy.isOfflineOnly(networkPolicy)) { cacheControl = CacheControl.FORCE_CACHE; } else { CacheControl.Builder builder = new CacheControl.Builder(); if (!NetworkPolicy.shouldReadFromDiskCache(networkPolicy)) { builder.noCache(); } if (!NetworkPolicy.shouldWriteToDiskCache(networkPolicy)) { builder.noStore(); } cacheControl = builder.build(); } } okhttp3.Request.Builder builder = new okhttp3.Request.Builder().url(uri.toString()); if (cacheControl != null) { builder.cacheControl(cacheControl); } okhttp3.Response response = client.newCall(builder.build()).execute(); int responseCode = response.code(); if (responseCode >= 300) { response.body().close(); throw new ResponseException(responseCode + " " + response.message(), networkPolicy, responseCode); } boolean fromCache = response.cacheResponse() != null; ResponseBody responseBody = response.body(); return new Response(responseBody.byteStream(), fromCache, responseBody.contentLength()); } @Override public void shutdown() { Cache cache = client.cache(); if (cache != null) { try { cache.close(); } catch (IOException ignored) { } } }}
0 0
- Okhttp和Picasso配合使用
- Okhttp和Picasso配合使用外加ACache实现缓存
- Retrofit和OkHttp的简单配合使用
- OkHttp配合LruCache使用
- 使用Picasso和okhttp以及AsyncTask加载网络图片
- OKHttp与Picasso联合使用的问题(图片下载异常)
- Recyclerview配合okhttp
- Glide和Picasso使用和区别
- 在OkHttp的使用过程中出现下列问题Picasso detected an unsupported OkHttp on the classpath.
- 在OkHttp的使用过程中出现下列问题Picasso detected an unsupported OkHttp on the classpath.
- 在OkHttp的使用过程中出现下列问题Picasso detected an unsupported OkHttp on the classpath.
- kotterKnife+dagger2+otto+okhttp+picasso+retrofit+rxjava示例项目,使用kotlin编写。
- Picasso的使用和源码解析
- Picasso的简单介绍和使用
- Picasso的使用和源码解析
- Picasso使用
- picasso使用
- picasso使用
- Python模块学习:sys模块
- oracle 12C中升级11g数据库到12c遇到ORA-65139
- log4j
- 数据结构学习笔记
- redis在java程序中的用法
- Okhttp和Picasso配合使用
- candy-leetcode :只需要遍历一遍的解法
- 正则表达式
- 手动开发一个Servlet
- Java关键字final、static使用总结
- c++第三次实验(基础班)-项目一
- Python语言基础及数据分析技术培训举行
- Giraph 内存测试
- R语言中包的操作