使用 Picasso 库加载图像一次

Load Image one time with Picasso library

我正在使用 Picasso 库从 url 获取图像。
我的问题是,当我第一次加载图像并退出我的应用程序时,我回来后我的应用程序尝试再次加载图像,但我不希望它发生。有没有其他方法可以做到这一点(只加载一次图像,其他时候不需要互联网加载)?

试试这个:

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

试试这个:

Picasso.with(this).invalidate(url);
    Picasso.with(this)
            .load(url)
            .networkPolicy(
                    NetworkUtils.isConnected(this) ?
                            NetworkPolicy.NO_CACHE : NetworkPolicy.OFFLINE)
            .resize(200, 200)
            .centerCrop()
            .placeholder(R.mipmap.ic_avatar)
            .error(R.mipmap.ic_avatar)
            .into(imageView);

以上答案的问题是他们只检查磁盘缓存中的图像可用性,它没有涵盖如果缓存中不存在图像则上网检索的部分

首先做一个扩展Application的class(在不影响你的应用的情况下,你可以随意命名,我的习惯是使用"Global")。

    public class Global extends Application {

        @Override
        public void onCreate() {
            super.onCreate();

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

确保为 OkHttp 库添加依赖项,它是由来自 Picasso 的同一批人开发的

compile 'com.squareup.okhttp:okhttp:2.4.0'

并在您的清单文件应用程序标签中添加 class:

android:name=".Global"

然后当你想检索图像时:

      Picasso.with(context)
             .load(Image URL)
             .networkPolicy(NetworkPolicy.OFFLINE)
             .into(imageView, new Callback() {
              @Override
              public void onSuccess() {
    }

             @Override
             public void onError() {
             //Try again online if cache failed
             Picasso.with(context)
             .load(Image URL)
             .into(imageView, new Callback() {

                @Override
               public void onSuccess() {

               }

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

以上方法检查图像是否已被缓存,如果没有则从互联网获取。