2016-10-28 3 views
1

私は自分のウェブサイトを表示したいが、div要素が少ないアプリで作業している。Android WebView Jsoup

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

コードを実行した後、空白/白のWebビューが表示されます。私が試みたのは、String html finalを作成し、後でwebviewの最終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);にキャストすることができますか?

答えて

0

正しい方法でAsyncTaskを使用していません。 thisとお読みください。

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

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

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を呼び出す必要があります

マニフェストでinternet-permissionを忘れないようにしてください。

+0

あなたが提案したコードに変更を加えました。明らかに聞こえます。しかし、それは私の最初の問題を修正するものではありません - 実際のhtml値を呼び出すことは –

+0

です。私はあなたの提案された変更を実装しました。私の最初の投稿を更新しました。私はまだ最終的なString html = ele.toString();を取得していない場所にいます。 - 私のWebView.loadData(html、mime、encoding); –

+0

質問を編集して、今使用しているコードを追加できますか? – TDG