ImageLoader: java.io.FileNotFoundException: /storage/sdcard0/Android/data/[...]/cache/uil-images/jo
2016-01-27 19:13
411 查看
插拔SD卡出现:
软件包名为com.android.customerservice,在com.android.customerservice.activity.UserFeedbackChildActivity的onCreate()方法中进行ImageLoader配置:
在UserFeedbackChildActivity页面时插拔SD卡,会闪退(必现),这是因为缓存路径会随着SD卡的插拔发生改变,在项目配置mk文件ProjectConfig.mk中有一个值MTK_2SDCARD_SWAP = yes/no,这个值可以通过反射得到:
若MTK_2SDCARD_SWAP = yes,则插上SD卡,其路径为/storage/sdcard0,手机内置SD卡路径为/storage/sdcard1,若拔出SD卡,则手机内置SD卡路径会变为/storage/sdcard0。路径的改变会导致FileNotFoundException,进一步导致其他异常。
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,进一步导致其他异常。
相关文章推荐
- BeanCreationException及java.lang.IllegalArgumentException: Page directive: invalid value for import
- iOS开发:UILabel无法响应点击事件的问题
- iOS动态适应UITextView高度
- arduino sensors
- Map按key排序和value排序方式
- 在VC6.0中能不能使用Duilib界面库呢?
- iOS UILabel、UIButton文字竖排显示
- Swagger-UI的配置与使用
- MUI - 图片预览(perviewimage)的优化
- 37 sensor kit. Arduino
- 【树】Unique Binary Search Trees
- 96. Unique Binary Search Trees && 95. Unique Binary Search Trees II
- Arduino Garden Controller - Automatic Watering and Data Logging
- Arduino based plant watering system using Soil Moisture Sensors
- 2、vuejs五脏
- hdu1121 Complete the Sequence
- HDU 4836 The Query on the Tree lca || 欧拉序列 || 动态树
- PIR Motion Sensor with Arduino
- 1,安装
- 关于UIView的autoresizingMask属性的研究【转】