WebView in AsyncTask

  • Hallo zusammen,
    ich lade in einem AsyncTasc eine Webseite in eine WebView.
    Im Falle die Seite nicht existiert möchte ich reagieren.
    Also habe ich

    Code
    wv.setWebViewClient(new WebViewClient()         {                           @Override                         public void onReceivedError( WebView view, int errorCode, String description, String failingUrl)                          {                            // do something                         }                  });




    in die doInBackground(Void... params) eingebunden.


    Funktioniert aber leider nicht :(


    Was mache ich falsch ?


    Ich danke für eure Meinungen

  • Du hast in der doInBackground() keinen Zugriff auf deinen UI Thread.
    Der WebView kann meines Wissens wie jedes andere View auch nur auf dem UI Thread laufen.


    Auf den UI Thread können nur onPreExecute(), onPostExecute() und onProgressUpdate() zugreifen.
    (Allerdings nur dann, wenn dein AsyncTask Teil deiner Activity ist.)


    Davon abgesehen macht deine doInBackground() ja permanent irgendwas. Woher willst du da mitten drin wissen, ob er jetzt fertig ist oder nicht?
    Generell: mach nix mit der UI in der doInBackground(). Gar nix. Nie.
    Mach alles, was du mit den im Hintergrund wie auch immer manipulierten Daten machen möchtest, in der onPostExecute().
    Erst da ist gewährleistet, dass wirklich alle Daten korrekt und erfolgreich bis zum Ende manipuliert wurden. Und dort hast du dann auch wieder Zugriff auf deinen UI Thread.


    Jetzt könntest du anmerken, dass es ja eine Möglichkeit geben muss um beispielsweise den aktuellen Downloadstand mitzuteilen. Da rufst du in der doInBackground() die publishProgress() auf und machst die UI Modifikationen in der onProgressUpdate(). Du machst ausschließlich UI-unabhängiges in der doInBackground()!

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • ich danke dir, ok. das leuchtet mir ein,
    allerdings hab ich noch ein anderes Problem in diesem Zusammenhang.
    Sobald ich

    Code
    wv.setWebViewClient


    setze, wird mir der eingebundene link in der WebView angezeigt.
    Er soll aber in einem externen Browser (funktioniert ohne setWebViewClient ) angezeigt werden.
    Wie bekomme ich so aber den gewünschten errorcode zurück?


    Gibts da andere Möglichkeiten ?

  • naja,
    die Seite die in dem WebView dargestellt wird (oberer Teil der App) enthält eine Link.
    Dieser Link wird in einem externen Browser vollflächig im kompletten Handyscreen angezeigt.


    wenn ich wv.setWebViewClient einbinde, wird dieser Link leider nur im Webview (oberer Teil der App) angezeigt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!