2016-03-14 45 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