Jsoup HTML Form Webview - PullRequest
       22

Jsoup HTML Form Webview

0 голосов
/ 21 марта 2011

Я хочу загрузить HTML-форму в веб-просмотр, однако она не работает для меня, и мне интересно, возможно ли это вообще? Это код, который у меня есть. Спасибо

       package com.timetable;

    import java.io.IOException;

    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.Window;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;

    public class Timetable extends Activity {
        WebView mWebView;
        String html = "<html><body>";
        Document docs;

        public void main(String... args) {

            try {
                 docs = Jsoup.connect("http://www.dcu.ie/timetables/search.shtml").get();
            } catch (IOException e) {
            e.printStackTrace();
        }

        Element table = docs.tagName("header-search");
        Elements tables = table.select("form");

        for (int i = 1; i < tables.size(); i ++) 
        {
            html += tables.get(i).toString() ;
            /*while (tables.get(i).text() == "")
            i++;
            html += "<tr>" + tables.get(i).toString();
            while (tables.get(i+1).text() == "")
            i++;
            html +=tables.get(i+1).toString() + "</tr>";
            i++;*/
        }

        html += "</html></body>";

    }

    public void onCreate(Bundle savedInstanceState) {
        main(); 

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.setWebViewClient(new TimeClient());

        mWebView.setInitialScale(1);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setDomStorageEnabled(true);
        mWebView.loadData(html, "text/html", "utf-8");

        final Activity MyActivity = this;
        mWebView.setWebChromeClient(new WebChromeClient() {
         public void onProgressChanged(WebView view, int progress)  
         {
          //Make the bar disappear after URL is loaded, and changes string to Loading...
          MyActivity.setTitle("Loading...");
          MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded

          // Return the app name after finish loading
             if(progress == 100)
                MyActivity.setTitle(R.string.app_name);
           }
         });
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();            
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    private class TimeClient extends WebViewClient {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            view.loadUrl(url);




            return true;
        }
    }


}

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

также не делайте этого: final Activity MyActivity = this;вместо этого используйте «MyActivity.this» внутри WebChromeClient.onProgressChanged

. Также есть ошибка с webView, которую вы не можете сделать «loadData (data, mime, enc)» по какой-то причине, которую вам нужно использовать: web.loadDataWithBaseURL ("fake: // host / path ", htmldata.toString (), mimetype, encoding," ");"fake: // host / path" является поддельным URL, но вы также можете использовать свою домашнюю страницу или что-то в этом роде.

, например что-то вроде:

public void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.setWebViewClient(new TimeClient());

    mWebView.setInitialScale(1);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setDomStorageEnabled(true);
    //mWebView.loadData(html, "text/html", "utf-8");

    //final Activity MyActivity = this;
    mWebView.setWebChromeClient(new WebChromeClient() {
     public void onProgressChanged(WebView view, int progress)  
     {
      //Make the bar disappear after URL is loaded, and changes string to Loading...
      MyActivity.setTitle("Loading...");
      MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded

      // Return the app name after finish loading
         if(progress == 100)
            MyActivity.this.setTitle(R.string.app_name);
       }
     });
}

public void onStart() {
   main(); 
   mWebView.loadData("fake://host/path",html, "text/html", "utf-8");
}

public void onStop() {
   // some JSoup disconnect code
}

, тогда webView будет загружаться каждый раз, когдаприложение запущено.

0 голосов
/ 21 марта 2011

move view.loadUrl (url);к вашему методу onStart.

, если вы использовали значок загрузки, переопределите onPageStarted и onPageFinished в WebViewClient.затем вы можете использовать WebChromeClient.onProgressChanged для обновления индикатора выполнения.

...