Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滑翔。缓存到外部存储器(SD卡)_Android_Android Glide - Fatal编程技术网

Android 滑翔。缓存到外部存储器(SD卡)

Android 滑翔。缓存到外部存储器(SD卡),android,android-glide,Android,Android Glide,我用于在android应用程序中加载图像。 3.5更新后,开发人员提供了接口。 根据(磁盘缓存),我可以使用setDiskCache方法和ExternalCacheDiskCacheFactory设置缓存目录 但我看不出有什么不同。所有缓存仍在默认缓存目录中的内部存储器上。 构建.渐变: dependencies { ... compile 'com.github.bumptech.glide:glide:3.6.1' } Glide.with(context) .load(

我用于在android应用程序中加载图像。
3.5更新后,开发人员提供了接口。
根据(磁盘缓存),我可以使用
setDiskCache
方法和
ExternalCacheDiskCacheFactory
设置缓存目录 但我看不出有什么不同。所有缓存仍在默认缓存目录中的内部存储器上。


构建.渐变

dependencies {
    ...
    compile 'com.github.bumptech.glide:glide:3.6.1'
}
Glide.with(context)
.load("some_url")
.dontAnimate()
.centerCrop()
.override(100, 100)
.into(holder.iv_image);
Android清单

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application ...>
<meta-data
        android:name="com.myapp.GlideConfig"
        android:value="GlideModule" />
</application>
public class GlideConfig implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            Log.e("GlideConfig", "MEDIA_MOUNTED");
            builder.setDiskCache(
                context.getString(R.string.app_name),
                        419430400));//400Mb
            //Environment.getExternalStorageDirectory().getPath()
            // + "/"
            // + context.getString(R.string.app_name)
        }
        else {
            Log.e("GlideConfig", "!MEDIA_MOUNTED");
        }
    }

    @Override
    public void registerComponents(Context context, Glide glide) {
    }
}
...
-keepnames class * com.myapp.GlideConfig
proguard rules.pro

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application ...>
<meta-data
        android:name="com.myapp.GlideConfig"
        android:value="GlideModule" />
</application>
public class GlideConfig implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            Log.e("GlideConfig", "MEDIA_MOUNTED");
            builder.setDiskCache(
                context.getString(R.string.app_name),
                        419430400));//400Mb
            //Environment.getExternalStorageDirectory().getPath()
            // + "/"
            // + context.getString(R.string.app_name)
        }
        else {
            Log.e("GlideConfig", "!MEDIA_MOUNTED");
        }
    }

    @Override
    public void registerComponents(Context context, Glide glide) {
    }
}
...
-keepnames class * com.myapp.GlideConfig
滑动用法

dependencies {
    ...
    compile 'com.github.bumptech.glide:glide:3.6.1'
}
Glide.with(context)
.load("some_url")
.dontAnimate()
.centerCrop()
.override(100, 100)
.into(holder.iv_image);

要设置值为
setDiskCache
GlideBuilder
,可以将ExternalStorageDirectory设置为缓存目录

  if (!Glide.isSetup()) {
   GlideBuilder gb = new GlideBuilder(this);
   DiskCache dlw = DiskLruCacheWrapper.get(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/YourCacheDirectory/"), 250 * 1024 * 1024);
   gb.setDiskCache(dlw);
   Glide.setup(gb);
}
检查


希望它对你有帮助。

你认为“内部存储默认缓存目录”是什么?代码在我看来还行,所以我想知道这是否只是一个关于Android认为什么是内部/外部存储的混淆问题。@TimMalseed,没有混淆。Glide和其他图像加载程序默认情况下将图像缓存放在“/data/data/com.package/cache”(内部存储)中。但“GlideModule”功能应该可以做到这一点。也许我遗漏了什么。你在什么设备/ROM上测试这个?你不能说“没有混乱”。当谈到Android上的内部/外部存储时,连谷歌都感到困惑。@TimMalseed三星Galaxy S2。如果你在GlideModule的applyOptions中添加日志语句,是否会打印任何内容?您能否将问题缩小到您的工厂,或者GlideModulesEdiskCache已被清除:(