我正在使用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); }
我已启用调试,并且始终显示红色和绿色。但是从不显示黄色
现在,如果我下次加载同一张图片,并且互联网不可用,则无法加载图片。
问题:
这就是我所做的。效果很好。
首先将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"); } }); } });