Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
363 views
in Technique[技术] by (71.8m points)

java - How to display a part of the webpage on the webview android

I am trying to extract small portion from webpage and load into webview I have tried following solution given in the link,But it did not work

Display a part of the webpage on the webview android

Extracting data using getElementsByClass("darewod")

htmlDocument = Jsoup.connect(htmlPageUrl).get();
element = htmlDocument.getElementsByClass("darewod");  

String html = element.toString();
String mime = "text/html";
String encoding = "utf-8";

I have tried the following two methods to load to webview but it seems not working,Its just printing HTML on UI

  wv1.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);

  wv1.loadData(html, "text/html", null);

Can you please tell me if i am missing anything here?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Your are loading your html code without the proper structure (so all definitions in head are lost, like CSS references) and without the initial document (or loading with base url) all relative paths are broken.

<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>

What you could do: replace the body of your document with your selected element, therby preserving the structure and information regarding base:

Example Code

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();
        }
    }

}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...