1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. marquies, 24.03.2011 #1
    marquies

    marquies Threadstarter Neuer Benutzer

    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

    Ü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

    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

    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 gefällt das.
  5. marquies, 25.03.2011 #5
    marquies

    marquies Threadstarter Neuer Benutzer

    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

    Hab loadData() in loadDataWithBaseURL() geändert und es läuft schon besser ;)

    Danke an alle.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Sind Notifications in einer Webview App möglich? Android App Entwicklung 10.09.2017
[OFFEN] Appinventor WebViewer Handy Android App Entwicklung 08.07.2017
[ERLEDIGT] Doubletap auf den Screen Android App Entwicklung 24.06.2017
[ERLEDIGT] WebView Probleme Android App Entwicklung 19.05.2017
[ERLEDIGT] GIF in WebView mehrmals abspielen Android App Entwicklung 02.04.2017