Pergunta

Eu tenho um WebView que eu estou usando para abrir alguns arquivos armazenados no diretório assets/ do meu projeto. Ele funciona muito bem para a maioria dos arquivos, mas há um em particular (e eu tenho certeza que outros Eu não encontrados) que apenas não aberto.

O arquivo que eu estou tendo problemas com é chamado:

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

Quando eu passá-lo para WebView, e mostra a página de erro, ele mostra-o como:

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

Então eu tentei correr URLEncoder.encode() nele e tem a página de erro com o URL apresentado como:

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

Nenhum destes URLs foram capazes de abrir o arquivo (e ambos olhar bem para mim). Alguém tem alguma idéia?

UPDATE: Se eu codificar o % à mão (usando %25, como commonsware.com sugerido), em seguida, ele carrega a imagem, mas ele tenta analisá-lo como texto, não como uma imagem, de forma Eu só recebo um monte de (basicamente) lixo.

Hosted by imgur.com

Além disso, referindo-se a imagem em um documento HTML com um URL relativo não está funcionando (provavelmente porque ele não está sendo analisado como uma imagem?):

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

Solução

Ok, depois de passar muito tempo sobre isso, eu descobri o que está acontecendo. Basicamente, se as imagens armazenadas no diretório assets/ conter um espaço (por exemplo, " ") em seu nome de arquivo, eles não vão processar como imagens.

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

funciona bem. No entanto,

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

apenas lança um erro não encontrado e

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

mostrá-lo indevidamente exibida (como texto ... veja a imagem em questão).

Esse comportamento inesperado está presente em (pelo menos) 1.5, 1.6, e 2.0 e eu arquivado um relatório de bug .

Outras dicas

Tente se livrar do % no nome do arquivo. Ou, escapar-lo como %25.

Eu diria que WebView só entende de texto relacionado tipos de conteúdo para que ele fielmente tratar o seu JPG como codificação Base64, decodifica e exibe resultou Devorar-goop como texto. Eu realmente não sei se é possível definir o tipo de conteúdo para WebView mas como solução alternativa, você pode tentar jogar tag img dentro tag html e de carregamento da página resultet. Além disso, você provavelmente só pode usar WebView # loadDataWithBaseUrl

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top