当前位置: 首页 > 面试题库 >

如何在毕加索中使用磁盘缓存?

家弘业
2023-03-14
问题内容

我正在使用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);
}

我已启用调试,并且始终显示红色和绿色。但是从不显示黄色

现在,如果我下次加载同一张图片,并且互联网不可用,则无法加载图片。

问题:

  1. 它没有本地磁盘缓存吗?
  2. 我如何启用磁盘缓存,因为我将多次使用相同的映像。
  3. 我是否需要向Android清单文件添加一些磁盘权限?

问题答案:

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

首先将OkHttp添加到app模块的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);

    }
}

如下所示将其添加到清单文件中:

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

</application>

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

编辑:

如果只想使用缓存的图像。这样调用库。我注意到,如果不添加networkPolicy,即使已缓存图像也不会在完全脱机的开始中显示。下面的代码解决了这个问题。

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

编辑#2

上面的代码的问题是,如果您清除缓存,毕加索将继续在缓存中脱机寻找它并失败,下面的代码示例将查看本地缓存,如果找不到离线,它将联机并补充缓存。

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");
            }
        });
    }
});


 类似资料:
  • 问题内容: 在一个课堂项目中,我的老师告诉我们进行一些代码评估(C语言),并且这样做,我们需要在测试期间禁用磁盘缓存。 当前我正在使用Ubuntu 12.04,该怎么做? 谢谢。 问题答案: 您需要root用户权限才能执行此操作。您可以运行命令以禁用写缓存,在该驱动器中必须将驱动器替换为设备: 您还可以像这样选择性地禁用对单个分区的写缓存:。 要重新启用缓存,只需使用参数。 男子hdparm的,人

  • “java.lang.OutOfMemoryError” .我想是因为我用了毕加索在我的RecycleView适配器。 代码如下:

  • 本文向大家介绍Android缓存之DiskLruCache磁盘缓存的使用,包括了Android缓存之DiskLruCache磁盘缓存的使用的使用技巧和注意事项,需要的朋友参考一下 DiskLruCache和LruCache不同的是,LruCache是内存缓存,而DiskLruCache是指磁盘缓存,顾名思义就是把文件缓存到磁盘,也也就是手机的内存卡中。接下来先简单介绍DiskLruCache的使用

  • 问题内容: 谁能给我一个例子,说明如何使用Picasso来以编程方式更改XML布局的背景吗?我发现的所有示例都可以使用Picasso更新ImageView,但不能更新布局背景。 问题答案: 您可以使用毕加索的目标: 更新 正如@BladeCoder在评论中提到的那样,毕加索对目标对象的引用很弱,因此很可能会被垃圾回收。 因此,在杰克·沃顿就其中一个问题发表评论之后,我认为这可能是一个不错的选择:

  • 正如你可以看到的使用链接,毕加索只有3个选项加载一个图像。我的问题是,如果您有一个从API的JSON响应解析的base64字符串,那么如何加载图像?

  • 问题内容: 我知道毕加索将图像加载到imageview等中,但是如何使用毕加索设置布局背景图像? 我的代码: 我在这里遇到的任何错误都表明它无法解决。我有一个ScrollView和相对布局。 问题答案: 使用毕加索的回调 更新: 也请检查此内容。如评论中提到的@OlivierH。