我正在尝试从网页中提取一小部分并加载到 webview 中 我已尝试以下链接中给出的解决方案,但它不起作用
Display a part of the webpage on the webview android
使用 getElementsByClass("darewod") 提取数据
htmlDocument = Jsoup.connect(htmlPageUrl).get();
element = htmlDocument.getElementsByClass("darewod");
String html = element.toString();
String mime = "text/html";
String encoding = "utf-8";
我尝试了以下两种方法来加载到webview,但似乎不起作用,它只是在UI上打印HTML
wv1.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
wv1.loadData(html, "text/html", null);
如果我在这里遗漏了什么,你能告诉我吗?
最佳答案
您正在加载 html 代码,而没有正确的 structure (因此 head
中的所有定义都会丢失,如 CSS 引用),并且如果没有初始文档(或使用基本 url 加载),所有相对路径都会被破坏。
<div class="darewod"> <a title="Workout of the Day" href="/workouts/lower-abs-workout.html" rel="alternate"><img src="/images/grid/wod/2016/wod_nov8.jpg" alt="Workout of the Day"></a> </div>
您可以做什么:用您选择的元素替换文档的正文,从而保留有关基础的结构和信息:
示例代码
WebView wv;
Handler uiHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView)findViewById(R.id.webView);
wv.setWebViewClient(new MyWebViewClient());
new BackgroundWorker().execute();
}
// load links in WebView instead of default browser
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
@RequiresApi(21)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return false;
}
}
private class BackgroundWorker extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
getDarewod();
return null;
}
public void getDarewod(){
try {
Document htmlDocument = Jsoup.connect("http://darebee.com/").get();
Element element = htmlDocument.select("#gkHeaderMod > div.darewod").first();
// replace body with selected element
htmlDocument.body().empty().append(element.toString());
final String html = htmlDocument.toString();
uiHandler.post(new Runnable() {
@Override
public void run() {
wv.loadData(html, "text/html", "UTF-8");
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
关于java - 如何在android webview上显示网页的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40477584/