1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

WebView

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von marquies, 24.03.2011.

  1. marquies, 24.03.2011 #1
    marquies

    marquies Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.03.2011
    Hallo liebe Community,

    ich hab ein simples WebView eingebaut. Funktioniert auch alles wunderbar. Leider werden die Daten aber teilweise etwas verzögert erst geladen.

    Ich habe es so gemacht, dass während des Downloads der Daten, in einem extra Thread, eine ProgressBar angezeigt wird. Sobald der Download fertig ist und WebView.loadData(); ausgeführt wurde, wird diese ProgressBar wieder geschlossen. Dabei kommt es aber gelegentlich zu einer Verzögerung. Es scheint mir dabei an dem WebView selber zu liegen und an der Verarbeitung des HTML Codes.

    Gibt es irgendwie die möglichkeit den parser des WebViews abzufragen und erst wenn er fertig ist, die ProgressBar zu schließen. Also eine Art WebView.onLoadFinish().

    Außerdem kommt es gelegentlich vor, dass das WebView "Die Seite wurde nicht gefunden" sagt, obwohl in dem Fehler der komplette Sourcecode der entsprechenden Seite steht.

    Der entsprechende Code:
    PHP:
            //-Artikel
            
    webView01 = (WebViewfindViewById(R.id.WebView01);
            
    webView01.setBackgroundColor(0); 
            
            
    //-Zoom Controls aktivieren
            
    webView01.getSettings().setSupportZoom(true);
            
    webView01.getSettings().setBuiltInZoomControls(true);
            
            
    //-WebView mit Daten befüllen
            
    webView01.loadData(URL zum Download), "text/html""utf-8");

            
    Vorher.progressDialog.dismiss();
     
  2. miha, 24.03.2011 #2
    miha

    miha Fortgeschrittenes Mitglied

    Beiträge:
    294
    Erhaltene Danke:
    43
    Registriert seit:
    12.01.2010
    Üblich ist wohl ein eigener Thread für den Progress der mWebview.getProgress() abfragt bis 100 erreicht ist. Da fehlt dann aber Zeit zum Rendern und die Webseite kommt etwas später.

    Ansonsten kannst du setWebViewClient(...) machen und darin ein onPageFinished(...) in dem du den Progressbar schließt ... aber auch da muss die Webseite nicht ganz fertig sein. Bilder können immer noch nachkommen. Und wenn es eine Seite mit irgendwelchen Refreshs ist ist sie sogar nie wirklich 'fertig' ...
     
    Zuletzt bearbeitet: 24.03.2011
  3. marquies, 25.03.2011 #3
    marquies

    marquies Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.03.2011
    Es ist eine Anzeige der Artikel von einem MediaWiki. Prinzipiel sollten alle Bilder entfernt sein. Daher werde ich deine Vorschläge mal probieren.
     
  4. garak, 25.03.2011 #4
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,794
    Registriert seit:
    12.12.2009
    Da du den WebView auch mit einem Http-String befüllen kannst, ist die Sache doch recht einfach. Über den HttpClient sorgst du selber für die Daten und hast dadurch alle Möglichkeiten zu kontrollieren wie weit der Übertragungsprozess ist. Anschließend schickst du den Stream als String in den WebView. Das sollte dein Problem lösen.
     
    marquies bedankt sich.
  5. marquies, 25.03.2011 #5
    marquies

    marquies Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.03.2011
    Das Problem ist aber, dass zwischen dem Download und dem laden der Seite eine verzögerung ist.

    Die activity wird erst gestartet, wenn der download komplett ist und dann wird die progressBar ausgeblendet aber trotzdem kommt es da zu einer verzögerung.

    Der Download erfolgt in Article.java im onCreate() Teil. Android wechselt erst zu der Activity, wenn onCreate() fertig ist, also wenn der download auch fertig ist.

    Hier der entsprechende Code:

    PHP:
            //-Thread starten um GUI Thread nicht zum hängen zu bringen
            
    Thread thread = new Thread() {
                
                
    //-Thread starten
                
    public void run() {
                    
                    
    //-Schleife vorbereiten
                    
    Looper.prepare();
                    
                    
    //-ProgressDialog starten, da Daten heruntergeladen werden
                    
    progressDialog.show();
                    
                    
    //-Intent erstellen
                    
    final Intent article = new Intent(CategoryGroup.thisArticle.class);

                    
    //-Suchmaske an Intent übergeben
                    
    article.putExtra(getString(R.string.categoryTitle), categoryTitle); 
                    
    article.putExtra(getString(R.string.articleTitle), articleTitle); 
                    
    article.putExtra(getString(R.string.articleID), articleID); 
                
                    
    //-Activity starten
                    
    startActivity(article);

                    
    Looper.loop();                
                }
            };
            
            
    //-Thread starten
            
    thread.start();
    Damit wird Article.java gestartet und im onCrate von Article.java findet dann auch der Download statt und die Daten werden ins WebView geladen. Deshalb verstehe ich nicht, wieso es dort zu einer verzögerung kommt
     
  6. marquies, 27.03.2011 #6
    marquies

    marquies Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.03.2011
    Hab loadData() in loadDataWithBaseURL() geändert und es läuft schon besser ;)

    Danke an alle.
     

Diese Seite empfehlen