Невозможно открыть файл изображения в Android - исключение файла не найдено - PullRequest
3 голосов
/ 26 июля 2011

У меня установлено это приложение на моем устройстве (Nexus s).Он кэширует некоторые изображения, если вы используете это приложение.Вот почему он показывает кэшированные изображения в галерее моего устройства.

Я использую курсор, чтобы получить путь

final String[] columns = { MediaStore.Images.Media.DATA };
Cursor imagecursor = managedQuery(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns,
        MediaStore.Images.Media._ID + " = " + id, null, MediaStore.Images.Media._ID);
if (imagecursor != null && imagecursor.getCount() > 0){
    imagecursor.moveToPosition(0);
    String path = imagecursor.getString(imagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
    Log.d("path", path);
    File f = new File("file://" + path);
    Log.d("check_file", "" + f.exists());
}

Я получаю путь:

/ mnt/sdcard/cache/hk.ignition.podcast/cartoon/2/http%3A%2F%2Fbigcity.learnenglishapps.com%2Fimages%2Fcartoons%2Fset2%2Ffast-food-new-1.png

Загруженное изображение: http://bigcity.learnenglishapps.com/images/cartoons/set2/fast-food-new-1.png

Когда я беру файл или исследую его с помощью файлового менеджера, такого как Astro, он там.Но когда я проверяю, существует ли файл, он говорит: false.

Есть ли проблема с символами?

Обновление:

Удаление file:// работало, чтобы проверить, существует ли файл.

Далее, я хотел бы открыть этот файл в галерее.

  1. я должен использовать этот путь, чтобы открыть изображение?Но это не сработало:
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(
                Uri.parse("file:///mnt/sdcard/cache/hk.ignition.podcast/cartoon/2/http%3A%2F%2Fbigcity.learnenglishapps.com%2Fimages%2Fcartoons%2Fset2%2Ffast-food-new-1.png"),
                "image/*");
    startActivityForResult(intent, 3);
  1. Или я должен попытаться получить путь стиля content:// из MediaStore?

Обновление 2:

Решено с использованием:

Uri.fromFile(f);

Вместо Uri.Parse().Как он строит / символ из формата кодирования.

1 Ответ

2 голосов
/ 26 июля 2011

Изменить new File("file://" + path) на new File(path)

...