2011-03-20 6 views
-1

Je veux charger un formulaire HTML dans webview mais il ne fonctionne pas pour moi et je me demande si c'est même possible? C'est le code que j'ai. MerciJsoup HTML Form 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; 
     } 
    } 


} 

Répondre

2

également ne pas le faire: final Activity MyActivity = this; utiliser à la place « MyActivity.this » à l'intérieur WebChromeClient.onProgressChanged

aussi il y a une chasse aux sorcières avec webView vous ne pouvez pas faire « loadData (données, mime, enc) » pour une raison quelconque vous devez utiliser: web.loadDataWithBaseURL (» fake: // host/path ", htmldata.toString(), mimetype, encodage," "); "fake: // host/path" est une fausse URL mais vous pouvez aussi utiliser votre page d'accueil ou autre.

donc quelque chose comme:

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 
} 

alors le webView chargera chaque fois que l'application est lancée.

0

mouvement view.loadUrl (url); à votre méthode onStart.

si vous étiez une icône de chargement, redéfinissez onPageStarted & onPageFinished dans WebViewClient. alors vous pouvez utiliser WebChromeClient.onProgressChanged pour mettre à jour votre barre de progression.

+0

Désolé je ne comprends pas? Déplacez-le à ma méthode onCreate? Comment cela fonctionnerait-il? – dbaby7

+0

je pense que vous feriez mieux de lire les docs: – siliconeagle

+0

http://developer.android.com/reference/android/app/Activity.html – siliconeagle