android-如何缓存图像并离线显示?
我正在Web服务中使用Volley API,然后我将使用SQLITE编写数据 带有JSON和许多iTen的Web服务,每个都有数据和图像,我需要将此图像保存在缓存中,以便在ListView中脱机显示,然后在详细信息屏幕上显示。在未来,用户将清理这些iTen,并清理它们的图像 那么,如何将这些图像保存在本地数据库中,并与JSON中的每个项目进行链接呢android-如何缓存图像并离线显示?,android,json,sqlite,caching,Android,Json,Sqlite,Caching,我正在Web服务中使用Volley API,然后我将使用SQLITE编写数据 带有JSON和许多iTen的Web服务,每个都有数据和图像,我需要将此图像保存在缓存中,以便在ListView中脱机显示,然后在详细信息屏幕上显示。在未来,用户将清理这些iTen,并清理它们的图像 那么,如何将这些图像保存在本地数据库中,并与JSON中的每个项目进行链接呢 90%的时间里,我都会离线。我只会在线同步并下载更新的服务器项目 您可以使用Android通用图像加载器,它还可以在内存中缓存图像。下次使用imag
90%的时间里,我都会离线。我只会在线同步并下载更新的服务器项目 您可以使用Android通用图像加载器,它还可以在内存中缓存图像。下次使用imageloader中用于获取图像的相同url时,它将从缓存中显示 请参阅下面的链接,以获取通用图像加载器示例的完整源代码
您可以使用Android Universal Image Loader,它还可以在内存中缓存图像。下次使用imageloader中用于获取图像的相同url时,它将从缓存中显示 请参阅下面的链接,以获取通用图像加载器示例的完整源代码
在Android中处理图像的基准是使用库。它负责:
- 在适配器中处理ImageView回收和下载取消李>
- 使用最少内存的复杂图像转换李>
- 自动内存和磁盘缓存
compile'com.squareup.Picasso:Picasso:2.5.2'
import com.squareup.picasso.Callback的类代码>:
公共类ImageWarehouse实现回调{
私有静态最终字符串TAG=“ImageWarehouse”
私有字符串mDirectory;
私有字符串mFileName;
私有ImageView mContainer;
@注入
应用程序地图应用;
公共ImageWarehouse(字符串文件名、ImageView容器、字符串目录){
this.mFileName=文件名;
this.mContainer=容器;
this.mDirectory=目录;
这是getStorageDir();
}
@凌驾
成功时的公共无效(){
if(this.isexternalstoragewriteable()){
最终位图位图=((BitmapDrawable)this.mContainer.getDrawable()).getBitmap();
新建异步任务(){
@凌驾
受保护的文件doInBackground(Void…params){
File=null;
试一试{
file=新文件(ImageWarehouse.this.getStorageDir().getPath().concat(“/”).concat(ImageWarehouse.this.mFileName.concat(Constants.MEDIA_扩展名));
createNewFile();
FileOutputStream ostream=新的FileOutputStream(文件);
compress(bitmap.CompressFormat.JPEG,100,ostream);
ostream.close();
}捕获(例外e){
Log.e(标签“外部存储不可用”);
}
返回文件;
}
}.execute();
}否则{
Log.e(标签“外部存储不可用”);
}
}
@凌驾
公开无效{
}
公共布尔值isExternalStorageWritable(){
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
返回true;
}
返回false;
}
公共文件getStorageDir(){
File File=新文件(Environment.getExternalStorageDirectory(),Constants.MEDIA_DIRECTORY.concat(this.mDirectory));
如果(!file.mkdirs()){
}
返回文件;
}
}
在Android中处理图像的基准是使用库。它负责:
- 在适配器中处理ImageView回收和下载取消李>
- 使用最少内存的复杂图像转换李>
- 自动内存和磁盘缓存
private String mDirectory;
private String mFileName;
private ImageView mContainer;
@Inject
App mApplication;
public ImageWarehouse(String fileName, ImageView container, String directory) {
this.mFileName = fileName;
this.mContainer = container;
this.mDirectory = directory;
this.getStorageDir();
}
@Override
public void onSuccess() {
if (this.isExternalStorageWritable()) {
final Bitmap bitmap = ((BitmapDrawable) this.mContainer.getDrawable()).getBitmap();
new AsyncTask<Void, Void, File>() {
@Override
protected File doInBackground(Void... params) {
File file = null;
try {
file = new File(ImageWarehouse.this.getStorageDir().getPath().concat("/").concat(ImageWarehouse.this.mFileName.concat(Constants.MEDIA_EXTENSION)));
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);
ostream.close();
} catch (Exception e) {
Log.e(TAG, "External Storage is not available");
}
return file;
}
}.execute();
} else {
Log.e(TAG, "External Storage is not available");
}
}
@Override
public void onError() {
}
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
public File getStorageDir() {
File file = new File(Environment.getExternalStorageDirectory(), Constants.MEDIA_DIRECTORY.concat(this.mDirectory));
if (!file.mkdirs()) {
}
return file;
}
create table sometable(id integer primary key autoincrement,photo BLOB);
//convert image into byte[]
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Bitmap bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.common)).getBitmap();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] photo = baos.toByteArray();
//And now store this image
ContentValues initialValues = new ContentValues();
initialValues.put("photo",photo);
return db.insert("sometable", null, initialValues);
Cursor cur=your query;
while(cur.moveToNext())
{
byte[] photo=cur.getBlob(index of blob cloumn);
}