Android获取富文本中图片请求的完整链接

引言:最近项目中要用到WebView加载服务器端的富文本中的内容,富文本中的内容主要是文字+图片,我们有个需求是将富文本中的图片下载到本地。
1、服务器端接口中的content(富文本)内容是:

  "content": "<p class=\"ql-align-justify\"><span class=\"ql-size-large\">弄堂,即小巷,是上海和江浙地区特有的民居形式,它是由连排的老房子(包括石库门)所构成的,并与石库门建筑有着密切的关系。它代表近代上海城市文化的特征,创造了形形色色风情独具的弄堂文化。弄堂的行行种种、弄堂的性感、弄堂的感动,它已经成为上海城市的华丽的背景色。弄堂作为休闲娱乐、儿童活动、交易等活动的场所。弄堂可分为广式里弄、新式石库门里弄 、新式里弄、花园式里弄等形式。span>p><p class=\"ql-align-justify\"><br>p><p class=\"ql-align-center\"><span class=\"ql-size-large\"><img src=\"http://img.xdnphb.com/genus/upload/editor/photo/2018/07/23/e3afeff5-4477-4c93-810a-245cb0e4bea7.jpg\">span>p><p class=\"ql-align-justify\"><br>p><p class=\"ql-align-justify\"><span class=\"ql-size-large\">近代上海地方文化最重要的组成部分弄堂(lòng táng),这一民居形式,曾经与千千万万上海市民的生活密不可分。多少个故事,多少个典故,多少个名人,多少个记忆,与石库门,与亭子间紧紧地联系在一起。可以说,没有弄堂,就没有上海,更没有上海人。弄堂,构成了近代上海城市最重要的建筑特色;弄堂构成了千万普通上海人最常见的生活空间;弄堂,构成了近代上海地方文化的最重要的组成部份。span>p><p class=\"ql-align-justify\"><br>p><p class=\"ql-align-center\"><span class=\"ql-size-large\"><img src=\"http://img.xdnphb.com/genus/upload/editor/photo/2018/07/23/fcab154d-b7a3-49e1-86af-ac20105d127b.jpg\">span>p><p><br>p><p class=\"ql-align-justify\"><span class=\"ql-size-large\">它最能代表近代上海城市文化的特征,它也是近代上海历史的最直接产物。span>p><p><br>p><p class=\"ql-align-justify\"><span class=\"ql-size-large\">上海人往昔的居住生活中离不开弄堂。所谓“弄堂”,是上海人对于里弄的俗称,它是由连排的石库门建筑所构成的,并与石库门建筑有着密切的关系。多少年来,大多数上海人就是穿梭在这些狭窄而悠长的弄堂里,也度过了他们漫长的人生,并且创造了形形色色风情独具的弄堂文化。span>p><p class=\"ql-align-justify\"><br>p><p>来源:百度百科p><p><br>p>"

2、接下来就是怎样获取content字段中的图片链接,也就是获取:(有几个获取几个)
http://img.xdnphb.com/genus/upload/editor/photo/2018/07/23/e3afeff5-4477-4c93-810a-245cb0e4bea7.jpg
一种方式是:通过字符串截取,不过这中方式太麻烦了。
3、百度搜索一篇文章中有个方法记录下,很适用

    /**
     * 截取富文本中的图片链接
     * @param content
     * @return
     */

    public static String[] returnImageUrlsFromHtml(String content) {
        List imageSrcList = new ArrayList();
        String htmlCode = content;
        Pattern p = Pattern.compile("]*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic|\\b)\\b)[^>]*>", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(htmlCode);
        String quote = null;
        String src = null;
        while (m.find()) {
            quote = m.group(1);
            src = (quote == null || quote.trim().length() == 0) ? m.group(2).split("//s+")[0] : m.group(2);
            imageSrcList.add(src);
        }
        if (imageSrcList == null || imageSrcList.size() == 0) {
            //Log.e("huangxiaoguo", "资讯中未匹配到图片链接");
            LogUtils.e("详情中未匹配到图片链接!!!");
            return null;
        }

        return imageSrcList.toArray(new String[imageSrcList.size()]);
    }

4、调用

    @Override
    public void initView(View view) {
        mCityDetailWebview= (WebView) findViewById(R.id.city_detail_webview);
        //获取从城市文章中传过来的城市内容
        Intent intent=getActivity().getIntent();
        String cityContent=  intent.getStringExtra(Constants.CITY_CONTENT);
        mCityDetailWebview.getSettings().setJavaScriptEnabled(true);//启用js
        mCityDetailWebview.getSettings().setBlockNetworkImage(false);//解决图片不显示
        mCityDetailWebview.getSettings().setUseWideViewPort(true);
        mCityDetailWebview.getSettings().setLoadWithOverviewMode(true);//设置webview加载页面的模式,页面自适应手机屏幕的分辨率
//手动截取
//        if(cityContent.contains("img")){
//            String first=cityContent.substring(0,cityContent.indexOf("/"));
//            String second = "http:"+cityContent.substring(cityContent.indexOf("/"), cityContent.lastIndexOf("."));
//            String third=cityContent.substring(cityContent.lastIndexOf("."),cityContent.length());
//            String url=first+second+third;
//            content = HTMLFormatUtils.getNewContent(url);
//            LogUtils.e("城市==","11111"+first+"22222"+second+"33333"+third+"CityCityCityCityCity");
//        }else{
//            content=HTMLFormatUtils.getNewContent(cityContent);
//        }

       // if (!TextUtils.isEmpty(content)) {
//            mCityDetailWebview.loadDataWithBaseURL(null, content, "text/html", "utf-8", null);
//        }


>   //通过上边的方法截取(有几个截取几个)
> 
>         String[]  imageUrls=returnImageUrlsFromHtml(cityContent);
>         for(int i=0;i
>          LogUtils.e("获取到的图片链接分别是:"+imageUrls[0]+"1111"+imageUrls[1]+"22222"+imageUrls[2]+"333333");
> 
>         }
        LogUtils.e(imageUrls.toString()+"!!!!"+imageUrls.length); 
    }

5、总结
调用下那个方法就可以获取到图片地址了
参考文章链接:https://blog.csdn.net/huangxiaoguo1/article/details/78422526

你可能感兴趣的:(android与H5混合开发)