为了账号安全,请及时绑定邮箱和手机立即绑定

请问如何在Picasso中使用磁盘缓存?

请问如何在Picasso中使用磁盘缓存?

浮云间 2019-08-02 07:02:05
如何在Picasso中使用磁盘缓存?我正在使用毕加索(Picasso)在我的Android应用程序中显示图像:/** * load image.This is within a activity so this context is activity */public void loadImage (){     Picasso picasso = Picasso.with(this);      picasso.setDebugging(true);     picasso.load(quiz.getImageUrl()).into(quizImage);}我已经启用了调试,它总是显示红色和绿色,但从不显示黄色现在,如果我加载相同的图像,下次,互联网是不可用的,图像是不加载的。问题:它没有本地磁盘缓存吗?如何启用磁盘缓存,因为我将多次使用相同的映像。是否需要向Android清单文件添加一些磁盘权限?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

我就是这么做的。效果很好。

首先,将OkHttp添加到应用程序模块的Gradle构建文件中:

compile 'com.squareup.picasso:picasso:2.5.2'compile 'com.squareup.okhttp3:okhttp:3.10.0'compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'

然后使类扩展Application

import android.app.Application;import com.jakewharton.picasso.OkHttp3Downloader;import com.squareup.picasso.Picasso;public class Global extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        Picasso.Builder builder = new Picasso.Builder(this);
        builder.downloader(new OkHttp3Downloader(this,Integer.MAX_VALUE));
        Picasso built = builder.build();
        built.setIndicatorsEnabled(true);
        built.setLoggingEnabled(true);
        Picasso.setSingletonInstance(built);

    }}

将其添加到Manifest文件,如下所示:

<application
        android:name=".Global"
        .. ></application>

现在就像往常一样使用毕加索。没有变化。

编辑:

如果您只想使用缓存的映像。像这样打电话给图书馆。我注意到如果我们不添加网络策略,图像不会出现在完全离线启动时即使它们被缓存..下面的代码解决了这个问题。

Picasso.with(this)
            .load(url)
            .networkPolicy(NetworkPolicy.OFFLINE)
            .into(imageView);

编辑#2

以上代码的问题是,如果清除缓存,Picasso将继续在缓存中脱机查找它,然后失败,下面的代码示例将查看本地缓存,如果未找到脱机,它将联机并补充缓存。

Picasso.with(getActivity()).load(imageUrl).networkPolicy(NetworkPolicy.OFFLINE).into(imageView, new Callback() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onError() {
        //Try again online if cache failed
        Picasso.with(getActivity())
                .load(posts.get(position).getImageUrl())
                .error(R.drawable.header)
                .into(imageView, new Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {
                Log.v("Picasso","Could not fetch image");
            }
        });
    }});




查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 323 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信