-1

我想将 HTML 表单加载到 webview 中,但是它对我不起作用,我想知道它是否可能?这是我的代码。谢谢

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


}
4

2 回答 2

2

也不要这样做:final Activity MyActivity = this; 而是在 WebChromeClient.onProgressChanged 中使用“MyActivity.this”

webView 也有一个陷阱,由于某种原因你需要使用“loadData(data,mime,enc)”:web.loadDataWithBaseURL("fake://host/path",htmldata.toString(), mimetype,编码, ""); “fake://host/path”是一个假网址,但你也可以使用你的主页或其他东西。

所以像:

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。

于 2011-03-21T06:14:25.297 回答
0

移动 view.loadUrl(url); 到你的 onStart 方法。

如果您是加载图标,请在 WebViewClient 中覆盖 onPageStarted 和 onPageFinished。然后你可以使用 WebChromeClient.onProgressChanged 来更新你的进度条。

于 2011-03-20T23:47:01.177 回答