2009-11-10 3 views
4

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

файл У меня возникли проблемы с называется:

"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() и получил страницу с ошибкой, указанную в качестве:

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

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

UPDATE: Если я кодировать % вручную (с использованием %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" /> 

ответ

9

Хорошо, потратив слишком много времени на это, я выяснил, что происходит. В принципе, если изображения, хранящиеся в каталоге 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 и I filed a bug report.

+0

Спасибо за освобождение этого – Bostone

3

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

+0

Ну конечно, но не должно 'URLEncoder.encode()' обрабатывать это? Разве это не целая причина для существования? Во всяком случае, я попробовал это, и он пытается открыть его сейчас, но он просто выгружает его как текст вместо рендеринга изображения. –

+0

Ваш тег в вашем обновлении не имеет правильно закодированного относительного URL-адреса, так как вы не избежали вашего знака% как% 25. Что касается того, почему URLEncoder.encode() этого не делает, я понятия не имею, но AFAIK у вас не может быть голого% в URL-адресе. Более того, поскольку это актив, запеченный в вашем APK, почему вы в первую очередь сталкиваетесь с неприятными именами файлов? Просто переименуйте файл в нечто простое. Если *, что * не удается, подтвердите, что у вас есть допустимое изображение в формате JPEG. – CommonsWare

+0

В основном я создаю порт приложения для iPhone, который позволит моему клиенту выгружать файлы в каталог активов, изменять настройки пары, а затем перекомпилировать, чтобы создать «совершенно новое приложение». Я не могу предсказать, какие символы будут содержать имена файлов, и это конкретно из набора тестов, который он мне предоставил. Поверь мне, если бы я мог просто переименовать файлы, которые я хотел бы. –

0

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

+0

Оказывается, он отлично работает с изображениями ... kinda. См. Мой ответ, если вам все равно. –

Смежные вопросы