Почему WebView не может открыть некоторые локальные URL-адреса (Android)? - PullRequest
4 голосов
/ 10 ноября 2009

У меня есть WebView, который я использую для открытия некоторых файлов, хранящихся в каталоге assets/ моего проекта. Он отлично работает для большинства файлов, но есть один конкретный (и я уверен, что другие я не нашел), что он просто не откроется .

Файл, с которым у меня проблемы, называется:

"assets/ContentRoot/Photos/XXX Software Logo - jpg - 75%.JPG"

Когда я передаю его на WebView, и он показывает страницу ошибки, он показывает это как:

"file:///android_asset/ContentRoot/Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG"

Затем я попытался запустить на нем URLEncoder.encode() и получил страницу ошибки с URL-адресом, представленным как:

"file:///android_asset/ContentRoot/Photos/XXX+Software+Logo+-+jpg+-+75%.JPG"

Ни один из этих URL не смог открыть файл (и они оба выглядят нормально для меня). У кого-нибудь есть идеи?

ОБНОВЛЕНИЕ: Если я кодирую % вручную (используя %25, как предложено commonsware.com), то он загружает изображение, но пытается проанализировать его как текст, а не как изображение, так что я просто получаю много (в основном) мусора.

Hosted by imgur.com

Кроме того, ссылка на изображение в HTML-документе с относительным URL-адресом не работает (возможно, из-за того, что оно не анализируется как изображение?):

<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG" />
<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%25.JPG" />

Ответы [ 3 ]

9 голосов
/ 10 ноября 2009

Хорошо, потратив слишком много времени на это, я понял, что происходит. По сути, если изображения, хранящиеся в каталоге assets/, содержат пробел (например, "") в имени файла, они не будут отображаться как изображения.

myWebView.loadUrl("file:///android_asset/testimage.jpg");

отлично работает. Тем не менее,

myWebView.loadUrl("file:///android_asset/test+image.jpg");

просто выдает не найденную ошибку и

myWebView.loadUrl("file:///android_asset/test image.jpg");
// and
myWebView.loadUrl("file:///android_asset/test%20image.jpg");

показать, что он неправильно отображается (как текст ... см. Скриншот).

Это неожиданное поведение присутствует (по крайней мере) в 1.5, 1.6 и 2.0, и я подал отчет об ошибке .

3 голосов
/ 10 ноября 2009

Попробуйте избавиться от % в имени файла. Или, избегайте его как %25.

0 голосов
/ 10 ноября 2009

Я бы предположил, что WebView понимает только типы текста, связанные с текстом, поэтому он верно рассматривает ваш JPG как кодировку base64, декодирует и отображает полученную gobble-goop как текст. Я действительно не знаю, возможно ли установить тип содержимого для WebView, но в качестве обходного пути вы можете попытаться добавить тег img внутрь html-тега и загрузить страницу результатов. Также вы, вероятно, можете использовать только WebView # loadDataWithBaseUrl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...