栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Android 4.0中使用DiskLruCache不提供openCache方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Android 4.0中使用DiskLruCache不提供openCache方法

您可以将Picasso用作图像加载器。

要么

这是我所做的:

我使用DiskLruCache对象(来自Jake Wharton的对象)和开发指南上的简单实现中的相同方法(有效显示位图)创建了一个名为DiskLruImageCache的类:

public class DiskLruImageCache {    private DiskLruCache mDiskCache;    private CompressFormat mCompressFormat = CompressFormat.JPEG;    private int mCompressQuality = 70;    private static final int APP_VERSION = 1;    private static final int VALUE_COUNT = 1;    private static final String TAG = "DiskLruImageCache";    public DiskLruImageCache( Context context,String uniqueName, int diskCacheSize,        CompressFormat compressFormat, int quality ) {        try {     final File diskCacheDir = getDiskCacheDir(context, uniqueName );     mDiskCache = DiskLruCache.open( diskCacheDir, APP_VERSION, VALUE_COUNT, diskCacheSize );     mCompressFormat = compressFormat;     mCompressQuality = quality; } catch (IOException e) {     e.printStackTrace(); }    }    private boolean writeBitmapToFile( Bitmap bitmap, DiskLruCache.Editor editor )        throws IOException, FileNotFoundException {        OutputStream out = null;        try { out = new BufferedOutputStream( editor.newOutputStream( 0 ), Utils.IO_BUFFER_SIZE ); return bitmap.compress( mCompressFormat, mCompressQuality, out );        } finally { if ( out != null ) {     out.close(); }        }    }    private File getDiskCacheDir(Context context, String uniqueName) {    // Check if media is mounted or storage is built-in, if so, try and use external cache dir    // otherwise use internal cache dir        final String cachePath = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||         !Utils.isExternalStorageRemovable() ?         Utils.getExternalCacheDir(context).getPath() :         context.getCacheDir().getPath();        return new File(cachePath + File.separator + uniqueName);    }    public void put( String key, Bitmap data ) {        DiskLruCache.Editor editor = null;        try { editor = mDiskCache.edit( key ); if ( editor == null ) {     return; } if( writeBitmapToFile( data, editor ) ) {         mDiskCache.flush();     editor.commit();     if ( BuildConfig.DEBUG ) {        Log.d( "cache_test_DISK_", "image put on disk cache " + key );     } } else {     editor.abort();     if ( BuildConfig.DEBUG ) {         Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key );     } }} catch (IOException e) { if ( BuildConfig.DEBUG ) {     Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key ); } try {     if ( editor != null ) {         editor.abort();     } } catch (IOException ignored) { }        }    }    public Bitmap getBitmap( String key ) {        Bitmap bitmap = null;        DiskLruCache.Snapshot snapshot = null;        try { snapshot = mDiskCache.get( key ); if ( snapshot == null ) {     return null; } final InputStream in = snapshot.getInputStream( 0 ); if ( in != null ) {     final BufferedInputStream buffIn =      new BufferedInputStream( in, Utils.IO_BUFFER_SIZE );     bitmap = BitmapFactory.depreStream( buffIn );    }} catch ( IOException e ) { e.printStackTrace();        } finally { if ( snapshot != null ) {     snapshot.close(); }        }        if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", bitmap == null ? "" : "image read from disk " + key);        }        return bitmap;    }    public boolean containsKey( String key ) {        boolean contained = false;        DiskLruCache.Snapshot snapshot = null;        try { snapshot = mDiskCache.get( key ); contained = snapshot != null;        } catch (IOException e) { e.printStackTrace();        } finally { if ( snapshot != null ) {     snapshot.close(); }        }        return contained;    }    public void clearCache() {        if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", "disk cache CLEARED");        }        try { mDiskCache.delete();        } catch ( IOException e ) { e.printStackTrace();        }    }    public File getCacheFolder() {        return mDiskCache.getDirectory();    }}

实用程序源代码为:

public class Utils {    public static final int IO_BUFFER_SIZE = 8 * 1024;    private Utils() {};    public static boolean isExternalStorageRemovable() {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { return Environment.isExternalStorageRemovable();        }        return true;    }    public static File getExternalCacheDir(Context context) {        if (hasExternalCacheDir()) { return context.getExternalCacheDir();        }        // Before Froyo we need to construct the external cache dir ourselves        final String cacheDir = "/Android/data/" + context.getPackageName() + "/cache/";        return new File(Environment.getExternalStorageDirectory().getPath() + cacheDir);    }    public static boolean hasExternalCacheDir() {        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;    }}

记得放

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在您的AndroidManifest.xml

我通过阅读以下代码和Jake Wharton的DiskLruCache中的javadoc找出了这种方式



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369465.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号