[Android]loadDataWithBaseURLでローカルファイルの画像を表示する

テクノロジー

めっちゃ詰まったけど、原因はすごくしょうもなかったのでメモ。

確認環境

AndroidStudio 1.5.1
Android 6.0.1(API23)

やりたいこと

ローカルファイル領域に配置したHTMLをWebViewに表示する。
ここで、同じくローカルファイル領域に配置したIMGも表示したい。

ファイル構造

com.pokete.aaaaa
├files
│└html
│ ├index.html
│ └pic.png
:

こんな感じで配置したfiles/html/index.htmlには、「img src="pic.png"」みたいな感じでIMGタグが書いてある。

完成形

// String html <- index.htmlを読みこんでそのままポーイしたもの
WebView wView = (WebView)view.findViewById(R.id.wv);

wView.loadDataWithBaseURL("file://" + getFilesDir().getPath() + "/html/", html, "text/html", "UTF8", null);

ミソは第一引数のbaseURL、このURLを基準にHTML中の相対パスを解決しに行く。

というのは書いてあるサイトもあるけれど、Androidを思いつき手あたり次第独学で勉強したので、「file://」を先頭につけなければならないのは盲点だった

なんかもっとスマートな書き方があるのかもしれないけれど、とりあえず解決したのでこれでいいか。

という自分用のメモ記事でした。