Android WebClient,通过WebResourceResponse返回图像资源 - 不显示图像

时间:2012-12-10 19:42:23

标签: android webview webviewclient

我的WebView有一个简单的WebViewClient,并且覆盖了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 个答案:

答案 0 :(得分:2)

你做错了。 您有两种方法可以做到这一点,这取决于接收该图像的内容。

案例1:您想要返回一个字节数组。在这种情况下,您应该使用Javascript处理它并将其解析为字符串并将其分配给webView上标记的src字段。

    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:您解析Activity上的所有内容并传递完整的html代码,因此在webView中您将使用此数据更新哪个innerHTML属性。

        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)

希望它有所帮助,我只是让我的工作

答案 1 :(得分:0)

我有类似的问题,设置两个标志解决了我的问题:

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