2016-03-14 70 views
0

我需要在Android Studio的Web視圖中顯示頁面的一部分,該部分包含PDF。這是我需要的網站https://www.limerick.ie/council/weekly-planning-lists,我想要展示的部分是http://i.imgur.com/S9Pwjte.png?1當我嘗試運行我的代碼時,Webview不顯示任何內容並且空白。JSoup爲Webview解析HTML代碼

這裏是我的代碼

package com.example.john_000.jsouptest; 

import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
import java.io.IOException; 

public class MainActivity extends Activity { 
public class HtmlParserActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     WebView cardapio = (WebView) findViewById(R.id.webView); 
     cardapio.getSettings().setJavaScriptEnabled(true); 
     String data = ""; 
     Document doc = null; 
     try { 
      doc = Jsoup.connect("https://www.limerick.ie/council/weekly-planning-lists").get(); 
      Elements elements = doc.getElementsByClass("block-inner clearfix"); 
      for (Element element : elements) { 
       data += element.outerHtml(); 
       data += "<br/>"; 
      } 
      cardapio.loadData(data, "text/html", "UTF-8"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
} 

如果有人知道如何解析這個HTML,這樣我只顯示所需的表您的幫助將不勝感激。

回答

1

替換這一個你try-catch塊:

try { 
    doc = Jsoup.connect("https://www.limerick.ie/council/weekly-planning-lists").get(); 
    Elements elements = doc.select("div.block-inner.clearfix"); 
    for (Element element : elements) { 
     if (!element.select("tbody").isEmpty()) { 
      data = element.outerHtml() + "<br/>"; 
      break; 
     } 
    } 
    cardapio.loadData(data, "text/html", "UTF-8"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

謝謝你的回覆。不幸的是我的模擬器仍然顯示爲空。 –

0

這是不是真的具體到Android(沒有我的Android設備方便),但這個工程上的Java:

String url = "https://www.limerick.ie/council/weekly-planning-lists"; 

Document document = Jsoup.connect(url).get(); 
Element div = document.select("table.sticky-enabled").first(); 

String text = div.outerHtml(); 
System.out.println(text); 

並可以產生以下輸出:

<table class="sticky-enabled"> 
<thead> 
    <tr> 
    <th>Attachment</th> 
    <th>Size</th> 
    </tr> 
</thead> 
<tbody> 
    <tr class="odd"> 
    <td><span class="file"><img class="file-icon" alt="PDF icon" title="application/pdf" src="/modules/file/icons/application-pdf.png"> <a href="https://www.limerick.ie/sites/default/files/260216_applications_refused.pdf" type="application/pdf; length=6526" title="260216_applications_refused.pdf">26/02/16 Applications Refused</a></span></td> 
    <td>6.37 KB</td> 
    </tr> 
    <tr class="even"> 
    <td><span class="file"><img class="file-icon" alt="PDF icon" title="application/pdf" src="/modules/file/icons/application-pdf.png"> <a href="https://www.limerick.ie/sites/default/files/260216_applications_granted.pdf" type="application/pdf; length=20585" title="260216_applications_granted.pdf">26/02/16 Applications Granted</a></span></td> 
    <td>20.1 KB</td> 
[...] 

因此,在你的代碼,你可以取代

Elements elements = doc.getElementsByClass("block-inner clearfix"); 
for (Element element : elements) { 
    data += element.outerHtml(); 
    data += "<br/>"; 
} 

隨着

data = doc.select("table.sticky-enabled").first().outerHtml(); 

這將讓你完整的表。

而您的data字符串將包含表格的完整HTML,然後您可以像之前一樣加載到WebView中。請注意,如果像這樣將原始HTML加載到WebView中,它將不會有任何格式或樣式,因爲樣式表(CSS)未加載。

如果它不工作:

  • 確保您的WebView在你的佈局是可見的。

  • 確保您已將「Internet」權限添加到您的AndroidManifest.xml中。

  • 看那logcat的(見here),看看你是否有任何異常,特別是NetworkOnMainThreadException(你很可能會得到,見here

讓我知道,如果它作品,如果沒有,我會嘗試在Android設備上看看。

+0

感謝您的回覆。在我的WebView顯示爲空的情況下,同樣的問題仍然存在。 WebView可見並且已經添加了互聯網許可。 LogCat中沒有NetworkOnMainThreadException。相反,我得到: –

+0

03-19 12:49:40.466 26845-26870/com.example.john_000.jsouptest W/EGL_emulation:eglSurfaceAttrib not implemented 03-19 12:49:40.466 26845-26870/com.example.john_000。 jsouptest W/OpenGLRenderer:無法在曲面0xaec38740上設置EGL_SWAP_BEHAVIOR,錯誤= EGL_SUCCESS 03-19 12:49:40.506 26845-26845/com.example.john_000。jsouptest W/ViewRootImpl:由於沒有窗口焦點而丟失事件:KeyEvent {action = ACTION_DOWN,keyCode = KEYCODE_ALT_RIGHT,scanCode = 100,metaState = META_ALT_ON | META_ALT_RIGHT_ON,flags = 0x8,repeatCount = 54637,eventTime = 4124943,downTime = 1295252,deviceId = 1,source = 0x301} –

+0

@GeneralDisorder,嗯,這似乎與Jsoup沒有關係。我會在真實的設備上嘗試你的代碼並檢查它。與此同時,嘗試加載預定義的字符串到您的WebView中,即。像這樣:'cardapio.loadData(「一些文本」,「文本/ HTML」,「UTF-8」);'。你的WebView仍然是空白的,還是顯示了一些東西?在這種情況下,它就是代碼中的Jsoup部分,它不能正常工作。另外嘗試輸出你的數據/文本到LogCat,例如'System.out.println(data)'。你在LogCat中獲得什麼? – JonasCz