猿问

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

如何在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);}

我已经启用了调试,它总是显示红色和绿色,但从不显示黄色

现在,如果我加载相同的图像,下次,互联网是不可用的,图像是不加载的。

问题:

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


浮云间
浏览 324回答 3
3回答

翻翻过去那场雪

我就是这么做的。效果很好。首先,将OkHttp添加到应用程序模块的Gradle构建文件中:compile&nbsp;'com.squareup.picasso:picasso:2.5.2'compile&nbsp;'com.squareup.okhttp3:okhttp:3.10.0'compile&nbsp;'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'然后使类扩展Applicationimport&nbsp;android.app.Application;import&nbsp;com.jakewharton.picasso.OkHttp3Downloader;import&nbsp;com.squareup.picasso.Picasso;public&nbsp;class&nbsp;Global&nbsp;extends&nbsp;Application&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onCreate()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onCreate(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Picasso.Builder&nbsp;builder&nbsp;=&nbsp;new&nbsp;Picasso.Builder(this); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.downloader(new&nbsp;OkHttp3Downloader(this,Integer.MAX_VALUE)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Picasso&nbsp;built&nbsp;=&nbsp;builder.build(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;built.setIndicatorsEnabled(true); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;built.setLoggingEnabled(true); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Picasso.setSingletonInstance(built); &nbsp;&nbsp;&nbsp;&nbsp;}}将其添加到Manifest文件,如下所示:<application &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:name=".Global" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;..&nbsp;></application>现在就像往常一样使用毕加索。没有变化。编辑:如果您只想使用缓存的映像。像这样打电话给图书馆。我注意到如果我们不添加网络策略,图像不会出现在完全离线启动时即使它们被缓存..下面的代码解决了这个问题。Picasso.with(this) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.load(url) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.networkPolicy(NetworkPolicy.OFFLINE) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.into(imageView);编辑#2以上代码的问题是,如果清除缓存,Picasso将继续在缓存中脱机查找它,然后失败,下面的代码示例将查看本地缓存,如果未找到脱机,它将联机并补充缓存。Picasso.with(getActivity()).load(imageUrl).networkPolicy(NetworkPolicy.OFFLINE).into(imageView,&nbsp;new&nbsp;Callback()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onSuccess()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onError()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Try&nbsp;again&nbsp;online&nbsp;if&nbsp;cache&nbsp;failed &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Picasso.with(getActivity()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.load(posts.get(position).getImageUrl()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.error(R.drawable.header) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.into(imageView,&nbsp;new&nbsp;Callback()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onSuccess()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onError()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.v("Picasso","Could&nbsp;not&nbsp;fetch&nbsp;image"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;}});
随时随地看视频慕课网APP

相关分类

Android
我要回答