ウェブサイトを表示したいが、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);
ですか?
あなたは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);
}
}
についてはMainActivity
、AsyuncTask
:を呼び出す必要があります。
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]
コメントを追加