我需要在Android Studio的Webview中显示页面的一部分,该部分包含PDF。这是我需要的网站https://www.limerick.ie/council/weekly-planning-lists,我要展示的部分是http://i.imgur.com/S9Pwjte.png?1当我尝试运行我的代码时,Webview不显示任何内容并显示为空白。
这是我的代码
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以便我只显示所需的表格,那么我们将非常感谢您的帮助。
答案 0 :(得分: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();
}
答案 1 :(得分: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设备并查看。