6

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。

代替手段として何を使用するかについての提案はありますか?

ありがとう!

4

2 に答える 2

2

あなたはそれを誤解している。それを行うには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:アクティビティのすべてを解析し、完全な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)

それがお役に立てば幸いです、私はちょうどこれで作業するようになりました

于 2014-02-18T22:44:10.073 に答える
0

同様の問題が発生し、2つのフラグを設定することで問題が解決しました。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
     getSettings().setAllowFileAccessFromFileURLs(true);
     getSettings().setAllowUniversalAccessFromFileURLs(true);
}
于 2013-12-23T15:24:27.473 に答える