Android WebClient, возвращающий ресурс изображения через WebResourceResponse – не отображает изображение

У меня есть простой WebViewClient для моего WebView, и я переопределяю shouldInterceptRequest: (Не фактический код)

public class WebViewClientBook extends WebViewClient { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { File file = new File("pathToTheFile.jpeg"); FileInputStream inputStream = new FileInputStream(file); return new WebResourceResponse("image/jpeg", "UTF-8", inputStream); } } 

По какой-то причине WebClient не может отображать изображение … Я считаю, что это может иметь какое-то отношение к неправильной кодировке: UTF-8.

Любые предложения, что использовать в качестве альтернативы?

Благодаря!

Ты делаешь это неправильно. У вас есть 2 способа сделать это, и это зависит от того, что получает этот образ.

Случай 1: вы хотите вернуть массив байтов. В этом случае у вас должен быть Javascript, обрабатывающий его и разбор его в строку и назначение его в поле src вашего тега в webView.

  File imagefile = new File(otherPath); FileInputStream fis = null; try { fis = new FileInputStream(imagefile); finall = fis; } catch (FileNotFoundException e) { e.printStackTrace(); } Bitmap bi = BitmapFactory.decodeStream(fis); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //PNG OR THE FORMAT YOU WANT bi.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] data = baos.toByteArray(); InputStream is = new ByteArrayInputStream(finaldata); return new WebResourceResponse("text/html", "UTF-8", is); 

Случай 2: вы анализируете все действия и передаете полный html-код, поэтому в webView вы будете иметь, какое внутреннее свойство HTML будет обновляться этими данными.

  File imagefile = new File(otherPath); FileInputStream fis = null; try { fis = new FileInputStream(imagefile); finall = fis; } catch (FileNotFoundException e) { e.printStackTrace(); } Bitmap bi = BitmapFactory.decodeStream(fis); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //PNG OR THE FORMAT YOU WANT bi.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] data = baos.toByteArray(); String image64 = Base64.encodeToString(data, Base64.DEFAULT); String customHtml = "<html><body><h1>Hello, WebView</h1>" + "<h2><img src=\"data:image/jpeg;base64," + image64 + "\" /></img></h2></body></html>"; InputStream is = new ByteArrayInputStream(finaldata); return new WebResourceResponse("text/html", "UTF-8", is); 

Если вы просто хотите загрузить изображение, вы всегда можете сделать webView.loadData(String data, String mimeType, String encoding)

Надеюсь, что это поможет, я просто помог мне работать с этим

У меня была аналогичная проблема, и для установки двух флагов были решены мои проблемы:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { getSettings().setAllowFileAccessFromFileURLs(true); getSettings().setAllowUniversalAccessFromFileURLs(true); }