java - 如何在android webview上显示网页的一部分

标签 java android webview jsoup

我正在尝试从网页中提取一小部分并加载到 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/

相关文章:

java - 错误: A JSONObject text must begin with '{' at 1688 [character 1689 line 1]

Android - 如何检查 Proguard 混淆是否有效?

ios - Webview 和导航 Controller

cordova - 所有 PhoneGap 3.5 oAuth 尝试均失败 (iOS)

java - 如何在webview(javaFX)中使用javascript(桥)调用的executeScript

java - 如何中断无限循环

java - 无法启动 DSE 搜索的 solr 方面

java - 如何阻止 Java Swing JOptionPane OK_CANCEL_OPTION 在 OK 选项上关闭?

android - 使用 Volley 进行异步帐户身份验证

android - 带有自动链接的 TextView 上的 ActivityNotFoundException ="web"