回答.gif或.png图像WebResourceResponse到shouldInterceptRequest

时间:2014-05-02 20:45:40

标签: java android webview png gif

我的功能拦截了对webview所做的所有请求。就像加载页面一样。

@Override
public WebResourceResponse shouldInterceptRequest(final WebView view,
    String url) {...}

正确回答了所有html,css和js文件,但是当我想发送png或gif图像作为响应时,它不起作用。他们可能需要特殊的MIME类型,但我无法使其发挥作用。

必须说我要发送的图片是通过HttpURLConnection中的InputStream收到并转换为String,并保存在文件夹中;所以当我需要图像时,我只需要取一个文件(String)并将其转换为InputStream

InputStream is = new ByteArrayInputStream(imageString.getBytes());
return new WebResourceResponse("text/html", "UTF-8", is);

我尝试使用image/gifimage/png但没有任何作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

输出流必须是FileOutputStream&#39>

您需要以字节格式保存图像,无需编码。

请记住,您需要保留图像文件的扩展名。 例如,如果您要下载image.png并将其另存为image.tiff,则无法使用。

这是我下载图片的方式:

URLConnection conn;

BufferedInputStream bistream = null;
BufferedOutputStream bostream = null;

boolean failed = false;

try
{
    conn = new URL("http://../image.png").openConnection();

    bistream = new BufferedInputStream(conn.getInputStream(), 512);

    byte[] b = new byte[512];

    int len = -1;

    bostream = 
        new BufferedOutputStream(
            new FileOutputStream(new File("/../image-downloaded.png")));

    while((len = bistream.read(b)) != -1)
    {
        bostream.write(b, 0, len);
    }
}
catch(Exception e) // poor practice, catch each exception separately.
{                   /* MalformedURLException -> IOException -> Exception */
    e.printStackTrace();

    failed = true;
}
finally
{
    if(bostream != null)
    {
        try
        {
            bostream.flush();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                bostream.close();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
    }

    if(bistream != null)
    {
        try
        {
            bistream.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}

if(failed == false)
{
    //code
}
else
{
    // code
}