WebView

M

marquies

Neues Mitglied
0
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 = (WebView) findViewById(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();
 
Ü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:
Es ist eine Anzeige der Artikel von einem MediaWiki. Prinzipiel sollten alle Bilder entfernt sein. Daher werde ich deine Vorschläge mal probieren.
 
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.
 
  • Danke
Reaktionen: marquies
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.this, Article.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
 
Hab loadData() in loadDataWithBaseURL() geändert und es läuft schon besser ;)

Danke an alle.
 

Ähnliche Themen

K
Antworten
3
Aufrufe
1.164
Kapikalaani
K
H
Antworten
0
Aufrufe
929
HoustonWeHaveAProblem
H
D
  • drmuffin
Antworten
1
Aufrufe
1.007
swa00
swa00
Zurück
Oben Unten