美文网首页
webview图片加载失败显示默认图片

webview图片加载失败显示默认图片

作者: waiwaaa | 来源:发表于2020-06-23 12:02 被阅读0次

    在Android项目中新闻显示需要使用图片的异步加载,并且在加载图片前和加载图片失败时显示默认图片。
    (1) 从相应请求获取到页面的数据,处理其中的img标签,将img标签中的src属性存储在img标签中的ori_link属性中,给img标签中的src属性赋值你默认图片所在路径,给img标签中的src_link属性赋值你的图片下载后保存的路径

    private voidhandleImageClickEvent(Document doc) {
         Elements container =doc.getElementsByTag("article");
         for (Element ce : container) {
            Elements es = ce.getElementsByTag("img");
            for (Element e : es) {
               String imgUrl = e.attr("src");
               if(!imgUrl.startsWith("http://")){
                   imgUrl = Constants.PIC_URL+imgUrl;
               }
               imgUrls.add(imgUrl);
               String imgName;
               imgName = StrMD5.getStrMD5(imgUrl);;
               String filePath = "file:///mnt/sdcard/"
                      + Constants.WEB_IMAGE_CACHDIR + "/" +imgName;
               e.attr("src", "file:///android_asset/news_info_default_image.jpg");
               e.attr("src_link", filePath);
               e.attr("ori_link", imgUrl);
            }
        }
    

    (2) 使用webview的loadDataWithBaseURL(Constants.BASE_URL, result,"text/html", "utf-8", null);
    Constants.BASE_URL 是为了使在一些页面中使用js或其他方式访问自己工程相对路径资源的时候使用的。

    (3) 重写webview的WebViewClient ,在onPageFinished方法中启动图片异步加载方法:
    在task的doInBackground中下载图片并保存到sd卡指定位置,下载完一个就通知publishProgress(urlStr)urlStr是图片网址。
    在task的onProgressUpdate方法中加载替换img属性的js:

    @Override
      protected void onProgressUpdate(String...values) {
         super.onProgressUpdate(values);
     
         mNewsInfoWebview
               .loadUrl("javascript:(function(){"
                      +"var contener =document.getElementsByTagName(\"article\");"
                      +"var objs;"
                      +"for(var i=0;i<contener.length;i++){ varobjs=contener[i].getElementsByTagName(\"img\")}"
                      + "for(var i=0;i<objs.length;i++)  "
                      + "{"
                      + "    var imgSrc =objs[i].getAttribute(\"src_link\"); "
                      + "    var imgOriSrc =objs[i].getAttribute(\"ori_link\"); "
                      + " if(imgOriSrc == \"" + values[0] + "\"){"
                      + "   objs[i].setAttribute(\"src\",imgSrc);}"
                      + "}" + "})()");
    }
    
    

    内容来源Webview 图片异步加载及bug解决

    相关文章

      网友评论

          本文标题:webview图片加载失败显示默认图片

          本文链接:https://www.haomeiwen.com/subject/eygcfktx.html