Android Okhttp缓存:Cache,创建OkHttpClient实现(一)

简介: Android Okhttp缓存Cache,创建OkHttpClient实现Android Okhttp使用缓存通过Cache实现。

Android Okhttp缓存Cache,创建OkHttpClient实现

Android Okhttp使用缓存通过Cache实现。在创建OkHttpClient实现。构造Cache需要传递一个缓存文件目录已经缓存的大小尺寸。

下面演示一个简单功能,加载一张图片到一个ImageView,如果该连接下图片已经存在,那么即便在断网时候,也能使用缓存加载出来。

package zhangphil.app;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    private OkHttpClient mOkHttpClient;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ImageView image = (ImageView) findViewById(R.id.image);

        File cacheDir = new File(this.getCacheDir(), "zhangphilcache");
        Cache mCache = new Cache(cacheDir, 8 * 1024 * 1024);
        OkHttpClient.Builder mBuilder = new OkHttpClient.Builder();

        mOkHttpClient = mBuilder
                .connectTimeout(10, TimeUnit.SECONDS) //连接超时阈值
                .writeTimeout(10, TimeUnit.SECONDS) //写超时阈值
                .readTimeout(10, TimeUnit.SECONDS)  //读超时阈值
                .retryOnConnectionFailure(true) //当失败后重试
                .cache(mCache)
                .build();

        String url = "https://www.baidu.com/img/bd_logo1.png";
        Request mRequest = new Request.Builder().url(url).build();

        mOkHttpClient.newCall(mRequest).enqueue(new Callback() {

            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    byte[] bytes = response.body().bytes();
                    final Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            image.setImageBitmap(bmp);
                        }
                    });
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        //取消所有Okhttp的网络请求
        mOkHttpClient.dispatcher().cancelAll();
    }
}


相关文章
|
2月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
776 10
|
3月前
|
存储 缓存 NoSQL
Spring Cache缓存框架
Spring Cache是Spring体系下的标准化缓存框架,支持多种缓存(如Redis、EhCache、Caffeine),可独立或组合使用。其优势包括平滑迁移、注解与编程两种使用方式,以及高度解耦和灵活管理。通过动态代理实现缓存操作,适用于不同业务场景。
322 0
|
5月前
|
Java Android开发
Android使用okhttp加载图片
本教程介绍了如何使用 OkHttp 和 Handler 在 Android 应用中加载并显示网络图片。首先确保添加了网络权限和 OkHttp、Okio 的依赖包。通过定义全局 Handler 处理消息,实例化 OkHttpClient 请求图片数据,并在 onResponse 方法中将图片数据传递给主线程,最终利用 Bitmap 加载到 ImageView 中。
115 4
|
7月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
179 15
|
存储 缓存 NoSQL
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
175 2
|
缓存 弹性计算 NoSQL
【Azure Redis 缓存 Azure Cache For Redis】Redis连接池
【Azure Redis 缓存 Azure Cache For Redis】Redis连接池
104 0
|
缓存 NoSQL Redis
【Azure Redis 缓存】Azure Cache for Redis 服务的导出RDB文件无法在自建的Redis服务中导入
【Azure Redis 缓存】Azure Cache for Redis 服务的导出RDB文件无法在自建的Redis服务中导入
|
缓存 开发框架 NoSQL
【Azure Redis 缓存】VM 里的 Redis 能直接迁移到 Azure Cache for Redis ? 需要改动代码吗?
【Azure Redis 缓存】VM 里的 Redis 能直接迁移到 Azure Cache for Redis ? 需要改动代码吗?
113 0
|
缓存 NoSQL Unix
【Azure Redis 缓存】Azure Cache for Redis 中如何快速查看慢指令情况(Slowlogs)
【Azure Redis 缓存】Azure Cache for Redis 中如何快速查看慢指令情况(Slowlogs)
|
缓存 NoSQL Redis
【Azure Redis 缓存】Azure Cache for Redis 是否记录具体读/写(Get/Set)或删除(Del)了哪些key呢?
【Azure Redis 缓存】Azure Cache for Redis 是否记录具体读/写(Get/Set)或删除(Del)了哪些key呢?
109 0

热门文章

最新文章