2015-04-28 6 views
0

Я следую за this ссылкой для создания приложения, которое получает изображение и текст из синтаксического анализа и отображает его в списке, это просто ленивый список. Все прекрасно работает. но в некоторых смартфонах, таких как Nexus4 или некоторые изображения телефонов HTC, не отображаются, а альтернативное изображение с возможностью рисования. LogCat показывает следующее исключение для этих телефонов, я не уверен, почему это происходит. Если кто-нибудь может понять это, пожалуйста.parse listview filenotfound exception в некоторых телефонах android

04-28 15:37:03.971: W/System.err(1434): java.io.FileNotFoundException: /storage/emulated/0/ParseListViewImgTxt/-2050135145: open failed: ENOENT (No such file or directory) 
04-28 15:37:03.971: W/System.err(1434):  at libcore.io.IoBridge.open(IoBridge.java:409) 
04-28 15:37:03.971: W/System.err(1434):  at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
04-28 15:37:03.971: W/System.err(1434):  at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 
04-28 15:37:03.971: W/System.err(1434):  at co.howlabs.cafe.lahore.ImageLoader.getBitmap(ImageLoader.java:73) 
04-28 15:37:03.971: W/System.err(1434):  at co.howlabs.cafe.lahore.ImageLoader.access$0(ImageLoader.java:56) 
04-28 15:37:03.971: W/System.err(1434):  at co.howlabs.cafe.lahore.ImageLoader$PhotosLoader.run(ImageLoader.java:147) 
04-28 15:37:03.971: W/System.err(1434):  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 
04-28 15:37:03.971: W/System.err(1434):  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
04-28 15:37:03.971: W/System.err(1434):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
04-28 15:37:03.971: W/System.err(1434):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
04-28 15:37:03.971: W/System.err(1434):  at java.lang.Thread.run(Thread.java:841) 
04-28 15:37:03.971: W/System.err(1434): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 
04-28 15:37:03.971: W/System.err(1434):  at libcore.io.Posix.open(Native Method) 
04-28 15:37:03.971: W/System.err(1434):  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
04-28 15:37:03.971: W/System.err(1434):  at libcore.io.IoBridge.open(IoBridge.java:393) 
04-28 15:37:03.971: W/System.err(1434):  ... 10 more 

на линии 88

private Bitmap decodeFile(File f) { 

начинается этот метод. и линия 73 является OutputStream os = new FileOutputStream(f);

код для открытия Адресной книги

public FileCache(Context context) { 
     if (android.os.Environment.getExternalStorageState().equals(
       android.os.Environment.MEDIA_MOUNTED)) 
      cacheDir = new File(
        android.os.Environment.getExternalStorageDirectory(), 
        "ParseListViewImgTxt"); 
     else 
      cacheDir = context.getCacheDir(); 
     if (!cacheDir.exists()) 
      cacheDir.mkdirs(); 
    } 
+0

попробуйте добавить 'Log.d (" STORAGE_STATE ", Environment.getExternalStorageState());' to onСоздать запуск и поделиться тем, что возвращается на этих устройствах. –

+0

он возвращает «смонтирован» @ inner_class7 –

+0

Я считаю, что вы не используете правильный каталог/storage/emulated/0/ParseListViewImgTxt/-2050135145 не должны находиться там, где вы храните данные. он должен быть/storage/emulated/0/sdcard/ParseListViewImgTxt/-2050135145, но похоже, что проблема с модемом/sdcard на телефонах HTC не совсем о LG nexus 4 ... Я использую LG G3 и среду. getExternalStorageDirectory() + "/ DirectoryName" работает для меня. Можете ли вы поделиться кодом, в котором вы открываете каталог для записи и чтения. –

ответ

0

Ах я выясняю проблема. его действие произошло для андроида 4.4. которому требуется разрешение, указанное на developer.android.com.
Приложение не может читать общие файлы во внешнем хранилище при работе на Android 4.4, если ваше приложение не имеет разрешения READ_EXTERNAL_STORAGE. То есть файлы в каталоге, возвращаемом getExternalStoragePublicDirectory(), больше не доступны без разрешения. Однако, если вам нужно получить доступ только к вашим каталогам, специфичным для приложения, предоставленным getExternalFilesDir(), тогда вам не нужно разрешение READ_EXTERNAL_STORAGE
Я просто добавляю READ_EXTERNAL_STORAGE разрешение.