您的位置:首页 > 产品设计 > UI/UE

ImageLoader: java.io.FileNotFoundException: /storage/sdcard0/Android/data/[...]/cache/uil-images/jo

2016-01-27 19:13 411 查看
插拔SD卡出现:

01-23 15:48:00.512  2385  2385 E ImageLoader: /storage/sdcard0/Android/data/com.android.customerservice/cache/uil-images/journal.tmp: open failed: EIO (I/O error)
01-23 15:48:00.512  2385  2385 E ImageLoader: java.io.FileNotFoundException: /storage/sdcard0/Android/data/com.android.customerservice/cache/uil-images/journal.tmp: open failed: EIO (I/O error)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at libcore.io.IoBridge.open(IoBridge.java:496)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.cache.disc.impl.ext.DiskLruCache.rebuildJournal(DiskLruCache.java:358)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.cache.disc.impl.ext.DiskLruCache.open(DiskLruCache.java:250)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache.initCache(LruDiskCache.java:112)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache.<init>(LruDiskCache.java:106)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.core.DefaultConfigurationFactory.createDiskCache(DefaultConfigurationFactory.java:89)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.core.ImageLoaderConfiguration$Builder.initEmptyFieldsWithDefaultValues(ImageLoaderConfiguration.java:580)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.core.ImageLoaderConfiguration$Builder.build(ImageLoaderConfiguration.java:559)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.android.customerservice.activity.UserFeedbackChildActivity.onCreate(UserFeedbackChildActivity.java:160)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.Activity.performCreate(Activity.java:6100)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2614)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread.access$800(ActivityThread.java:178)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.os.Handler.dispatchMessage(Handler.java:111)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.os.Looper.loop(Looper.java:194)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread.main(ActivityThread.java:5643)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at java.lang.reflect.Method.invoke(Native Method)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at java.lang.reflect.Method.invoke(Method.java:372)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
01-23 15:48:00.512  2385  2385 E ImageLoader: Caused by: android.system.ErrnoException: open failed: EIO (I/O error)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at libcore.io.Posix.open(Native Method)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
01-23 15:48:00.512  2385  2385 E ImageLoader:   at libcore.io.IoBridge.open(IoBridge.java:482)
01-23 15:48:00.512  2385  2385 E ImageLoader:   ... 23 more


软件包名为com.android.customerservice,在com.android.customerservice.activity.UserFeedbackChildActivity的onCreate()方法中进行ImageLoader配置:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
.threadPriority(Thread.NORM_PRIORITY - 2)//设置当前线程的优先级
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator())//使用MD5对UIL进行加密命名
.diskCacheSize(100 * 1024 * 1024)// sd卡(本地)缓存的最大值
.tasksProcessingOrder(QueueProcessingType.LIFO)//后进先出
.build();


在UserFeedbackChildActivity页面时插拔SD卡,会闪退(必现),这是因为缓存路径会随着SD卡的插拔发生改变,在项目配置mk文件ProjectConfig.mk中有一个值MTK_2SDCARD_SWAP = yes/no,这个值可以通过反射得到:

public static String getSwap() {
Object result = null;
try {
Class cl = Class.forName("android.os.SystemProperties");
Object invoker = cl.newInstance();
Method m = cl.getMethod("get", new Class[] { String.class, String.class });
result = m.invoke(invoker, new Object[] { "ro.mtk_2sdcard_swap", "unknown" });
return (String) result;

} catch (Exception e) {
e.printStackTrace();
}
return (String) result;
}


若MTK_2SDCARD_SWAP = yes,则插上SD卡,其路径为/storage/sdcard0,手机内置SD卡路径为/storage/sdcard1,若拔出SD卡,则手机内置SD卡路径会变为/storage/sdcard0。路径的改变会导致FileNotFoundException,进一步导致其他异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: