Android WebView Jsoup

ビデオマン

ウェブサイトを表示したいが、div要素が少ないアプリに取り組んでいます。

このサンプルコードでは、stackoverflow.comのWebサイトを使用して、divクラスのhmenu(メインWebサイトの上部にあるボタン)を非表示にしようとしました。

コードを実行した後、空白/白いWebビューが表示されます。私が試したのは、String htmlをfinalにし、後でそれを呼び出して、Webビューの最終URLを設定することです。

コード:

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.File;

public class MyCustomAsyncTask extends AsyncTask<File, Void, String> {
@Override
protected String doInBackground(File... params) {

    Document doc = Jsoup.connect("http://stackoverflow.com/").get();
    Elements ele = doc.select(":not(#hmenus)");        // ->>>>> Jsoup html
    final String html = ele.toString();

}}

public class MainActivity extends Activity {


    private WebView WebView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView = (WebView) findViewById(webView);
        WebView.setWebChromeClient(new WebChromeClient());
        WebView.getSettings().setJavaScriptEnabled(true);
        WebView.getSettings().setDomStorageEnabled(true);

        final String mime = "text/html";
        final String encoding = "utf-8";
        WebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {

                // ->>>>>>   Change the website --->>> insert call html value
                WebView.loadData(html, mime, encoding);
            }
        });
    }
}

htmlの値を呼び出してfinal String html = ele.toString();キャストするにはどうすればよいWebView.loadData(html, mime, encoding);ですか?

TDG

あなたはAsyncTask正しい方法を使用しいませんこれを読む必要があります

Webページを取得し、準備ができたときに結果を表示するためのを宣言しAsyncTaskて実装しdoInBackgroundますonPostExecute

private class GetData extends AsyncTask<Void, Void, String> {

// This is run in a background thread
    @Override
    protected String doInBackground(Void... params) {
        try {
            Document doc = Jsoup.connect("https://stackoverflow.com/")
                    .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0")
                    .get();
            Elements ele = doc.select("#hmenus");
            html = ele.toString();
            return html;
        } catch (Exception e) {
            Log.d("APP", e.toString());
        }            
        return "error";
    }

    // This runs in UI when background thread finishes
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        Log.d("APP", "1");
        WebView.loadData(result, mime, encoding);            
    }
}

についてはMainActivityAsyuncTask:を呼び出す必要があります。

public class MainActivity extends Activity {

    private WebView WebView;
    String html = "Loading...";
    final String mime = "text/html";
    final String encoding = "utf-8";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView = (WebView) findViewById(R.id.webview);
        WebView.setWebChromeClient(new WebChromeClient());
        WebView.getSettings().setJavaScriptEnabled(true);
        WebView.getSettings().setDomStorageEnabled(true);
        //Display "Loading..." message while waiting
        WebView.loadData(html, mime, encoding);
        //Invoke the AsyncTask
        new GetData().execute();
    }
}

internet-permissionマニフェストでを忘れないでください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事