2016-10-28 2 views
1

div 요소가 적은 웹 사이트를 표시하고 싶은 앱을 만들고 있습니다.Android WebView Jsoup

이 예제 코드에서는 stackoverflow.com 웹 사이트를 사용하여 div 클래스 hmenus (기본 웹 사이트 맨 위에있는 버튼)를 숨기려고했습니다.

코드를 실행 한 후에 빈/흰색 웹보기가 표시됩니다. 내가 시도한 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 선언하고 결과를 표시하는 웹 페이지와 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, 인코딩); –

+0

질문을 편집하고 지금 사용하고있는 코드를 추가 할 수 있습니까? – TDG