使用 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");
}
});
}
});
以上方法检查图像是否已被缓存,如果没有则从互联网获取。
我正在使用 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");
}
});
}
});
以上方法检查图像是否已被缓存,如果没有则从互联网获取。