2016-11-29 123 views
4

语境:加载图像

我的应用程序有时会显示“表”,这是包含文本和图片的HTML文件:

<p>image description </p> 
<p><img src="/api/medias/get/videos/56afad6447eba61c8099544b?thumbnail=true&amp;company=4f86d0a9d655ab9794f5d1d2&amp;fullSizedCover=true" 
    alt="" 
    data-id="56afad6447eba61c8099544b" 
    data-type="video" data-width="640" data-height="1136" /></p> 

然后我用body.loadDataWithBaseURL(<my api url>, body, "text/html; charset=UTF-8", null, null);

我不认为它是相关的,但我会说,以防万一,我有一个模板正文,其中包含CSS和JavaScript。该js脚本检测图像点击并将“data-id”传输给android方法(通过JavascriptInterface)。在这种情况下,它会打开一个视频播放器并播放它。


问题:

我的应用程序允许用户下载这些表的后面离线vizualisation。所以,我下载HTML,然后下载图片到我的本地私有目录(Context.getFileDir()),并更改HTML设置“缩略图”来源我下载的图像的src:

<p>video</p> 
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" 
    alt="" 
    data-id="56afad6447eba61c8099544b" 
    data-type="video" data-width="640" data-height="360" /></p> 

我的问题是:什么我把基地网址放到我的webview中以获得预期的行为(即:显示下载的图像)。

我试过Context.getFileDir().getAbsolutePath(),content://com.android.htmlfileprovider和其他一些。

我应该改变吗?

感谢了很多,


这非常适用:

Picasso.with(iv.getContext()).load(new File(getContext().getFilesDir() + "/" + "69c623955ecb5bd414f908cd383f3809.jpg")).into(iv);

的HTML:

<p>video</p> 
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" alt="" data-id="56afad6447eba61c8099544b" data-type="video" data-width="640" data-height="360" /></p> 

我基地网址:baseUrl = Uri.fromFile(getContext().getFilesDir()).toString();

并最终: webview.loadDataWithBaseURL(baseUrl, body, "text/html; charset=UTF-8", null, null);

+0

“我尝试了Context.getFileDir()。getAbsolutePath(),” - 尝试使用'file'方案。更容易使用'Uri.fromFile(getFilesDir())。toString()'。 – CommonsWare

+0

我的图片仍然不会显示这个baseUrl:'file:/// data/user/0//files',因为'new File(Context.getFilesDir()+“/”+“69c623955ecb5bd414f908cd383f3809.jpg”) .exists()'==真。 –

+0

@CommonsWare也是有用的吗? (以前没有,只是添加它们,但似乎没有改变任何东西): - 'body.getSettings()。setAllowFileAccess(true);' - 'body.getSettings()。setAllowContentAccess(true) ;' - 'body.getSettings()。setAllowFileAccessFromFileURLs(true);' - 'body.getSettings()。setAllowUniversalAccessFromFileURLs(true);' –

回答

0

如果您已经下载了/有模板,您可以尝试使用null baseUrl,并将该模板作为body传递给webview。 并通过之前查找img标签,并设置img src与本地存储的文件的完整路径。如下所示:

Document doc = Jsoup.parse(newHtml); 
Elements elems = doc.getElementsByTag("img"); 
for (Element el : elems) { 
    String filename = el.attr("src"); //presumably only name 
    String picUri = "file:///" + folder + "/"+filename; 
    el.attr("src", picUri); 
} 
web.loadDataWithBaseURL(null, htmlBody, "text/html", "UTF-8", null); 
+0

我不知道为什么,但确实,它不会工作把“基地”的基础网址,但传递null,并将其手动内部src标签工程 –