使用Jsoup解析Html == TextView顯示html圖片的方法
想要做一個看新聞的應用,類似Cnbeta客戶端的東西。大致思路如下:根據連結獲取新聞列表頁的html程式碼,然後解析,找到所有的新聞標題和新聞連結用listView顯示,當點選ListView的Item再載入相應的新聞內容。
其中獲取html程式碼,可以使用如下程式碼實現:
- public String getHtmlString(String urlString) {
- try {
- URL url = new URL(urlString);
- URLConnection ucon = url.openConnection();
- InputStream instr = ucon.getInputStream();
- BufferedInputStream bis = new BufferedInputStream(instr);
- ByteArrayBuffer baf = new ByteArrayBuffer(500);
- int current = 0;
- while ((current = bis.read()) != -1) {
- baf.append((byte) current);
- }
- return EncodingUtils.getString(baf.toByteArray(), "gbk");
- } catch (Exception e) {
- return "";
- }
- }
傳入一個網頁連結,將返回此連結的html程式碼(String)。
然後就是解析此html程式碼了。經過google,發現了java的一個很好用的解析html的庫,Jsoup:http://jsoup.org/
很容易使用,方法類似javascript和JQuery。只需先構建一個Jsoup的Document物件,然後就可以像使用js一個解析html了
- String htmlString = getHtmlString("http://www.cnbeta.com");
- Document document = Jsoup.parse(htmlString);
- String title = document.head().getElementsByTag("title").text();
另外構建Document的時候也可以直接使用URL,像這樣:
- Document doc = Jsoup.parse(new URL("http://www.cnbeta.com"), 5000);
有關Jsoup的下載和更多介紹,見其官網:http://jsoup.org/
我寫的一個demo,點選按鈕後會載入然後顯示cnbeta首頁的所有新聞標題和連結地址,下載:http://download.csdn.net/detail/barryhappy/4151450 ,zip包裡有jsoup的jar包,匯入專案後可能需要手動匯入此jar包。
執行效果圖——
===================================================================================
TextView是不只可以String的,我們平常用的給setText()方法傳遞String引數的時候,其實是呼叫的public final void setText (CharSequence text)方法,String類是CharSequence的子類。
而CharSequence子類眾多,其中有一個介面Spanned,即類似html的帶標記的文字。我們可以用它來在TextView中顯示html(自然,有很多html標記是不支援的,只支援一部分)。
Android.text.Html類的一個方法:
- public static Spanned fromHtml (String source)
- html = "<h1>this is h1</h1>"
- + "<p>This text is normal</p>"
- + "<img src='https://www.google.com.hk/intl/zh-CN/images/logo_cn.png' />";
- Spanned sp = Html.fromHtml(html);
- textView.setText(html);
顯示效果:
可以看出,字型效果基本是顯示出來了,但是圖片沒有顯示。
要實現圖片的顯示需要使用Html.fromHtml的另外一個重構方法:
public static Spanned fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
其中Html.ImageGetter是一個介面,我們要實現此介面,在它的getDrawable(String source)方法中返回圖片的Drawable物件才可以。
修改後的程式碼:
- Spanned sp = Html.fromHtml(html, new Html.ImageGetter() {
- @Override
- public Drawable getDrawable(String source) {
- InputStream is = null;
- try {
- is = (InputStream) new URL(source).getContent();
- Drawable d = Drawable.createFromStream(is, "src");
- d.setBounds(0, 0, d.getIntrinsicWidth(),
- d.getIntrinsicHeight());
- is.close();
- return d;
- } catch (Exception e) {
- return null;
- }
- }
- }, null);
- textView.setText(sp);
其中
- is = (InputStream) new URL(source).getContent();
- Drawable d = Drawable.createFromStream(is, "src");
由於用到了網路資源的圖片,所以要在Mainifest檔案中加入許可權:
- <uses-permission android:name="android.permission.INTERNET" />
圖片正常顯示了。
我做的demo,下載地址:http://download.csdn.net/detail/barryhappy/4154342
相關文章
- 【菜鳥學安卓】- TextView 顯示Html 一 解決圖片顯示不了的小問題安卓TextViewHTML
- Java中使用Jsoup解析HTML表格教程JavaJSHTML
- html2canvas生成圖片顯示不全HTMLCanvas
- Java爬蟲系列三:使用Jsoup解析HTMLJava爬蟲JSHTML
- Android中顯示html標籤或者帶圖片AndroidHTML
- Java爬蟲利器HTML解析工具-JsoupJava爬蟲HTMLJS
- 螢幕適配的頂級淫技:使用 TextView 來顯示圖片TextView
- HTML img 元素無法顯示 base64 圖片的可能原因HTML
- 使用java的HTML解析器 jsoup來防止XSS攻擊JavaHTMLJS
- Html 顯示pdfHTML
- HTML使用canvas載入圖片HTMLCanvas
- jsoup:一款使用Java語言開發的HTML解析器JSJavaHTML
- 【HTML】04圖片HTML
- HTML特殊字元顯示HTML字元
- 使用 hide和 show方法來隱藏和顯示 HTML 元素IDEHTML
- 將 HTML 生成圖片HTML
- WebView 顯示HTML富文字WebViewHTML
- html中背景圖按比例縮放全屏顯示HTML
- jsoup Java HTML解析器:使用選擇器語法來查詢元素JSJavaHTML
- HTML 標籤(圖片對映、熱點)的使用HTML
- html中圖片旋轉HTML
- HTML 連結和圖片HTML
- JS/HTML格式化顯示JSHTML
- html input type=file 選擇圖片,圖片預覽 純html js實現圖片預覽HTMLJS
- HTML中圖片的蒙朧效果!HTML
- html背景圖的使用HTML
- img圖片無法顯示利用onerror事件顯示替代圖片Error事件
- 【HTML】HTML自定義網頁頭部小圖示HTML網頁
- 005_HTML製作炫酷登入介面(CSS精靈圖、背景圖片區域性顯示)HTMLCSS
- HTML解析元件HtmlAgilityPack使用HTML元件
- java Html2Image 實現html轉圖片功能JavaHTML
- Elements皮膚顯示HTML註釋HTML
- iOS UILabel顯示html標籤iOSUIHTML
- strings.xml顯示html格式XMLHTML
- sql嵌入html格式顯示報表SQLHTML
- 本地HTML中圖片下載HTML
- domtoimage -- html轉化為圖片HTML
- html 圖片按比例縮放HTML