2017-03-16 3 views
0

Es ist unklar, wie Navigations/Internet-Verbindung Fehler zu implementieren.Android WebView Navigation Fehlermeldung

Ich habe Code versucht, von hier Android WebView onReceivedError()

aber es funktioniert nicht.

import android.app.Activity; 
import android.net.ConnectivityManager; 
import android.os.Build; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.View; 
import android.view.Window; 
import android.webkit.WebResourceRequest; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private WebView view; 
    private ImageView splashScreen; 
    private ImageView logo; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.activity_main); 

     splashScreen = (ImageView) this.findViewById(R.id.spscreen); 

     logo = (ImageView) this.findViewById(R.id.logo); 

     String url = "some URL"; 
     view = (WebView)this.findViewById(R.id.webView1); 

     view.setWebViewClient(new WebViewClient() { 

      public void onPageFinished(WebView view, String url) { 
       // do your stuff here 
       logo.setVisibility(View.INVISIBLE); 
       splashScreen.setVisibility(View.INVISIBLE); 
       view.setVisibility(View.VISIBLE); 
      } 
     }); 


     WebSettings s = view.getSettings(); 
     s.setJavaScriptEnabled(true); 

     s.setCacheMode(WebSettings.LOAD_DEFAULT); 
     s.setDomStorageEnabled(true); 


     view.loadUrl(url); 
    } 
} 
+0

Ich sehe keine Überschreibung von 'onReceivedError()' in Ihrem Code, beachte auch, dass die Methode in der Antwort oben veraltet war, es gibt einen anderen Geschmack. https://developer.android.com/reference/android/webkit/WebViewClient.html und es gibt 'onReceivedHttpError()' auch, könnte sein, was Sie brauchen – Yazan

+0

@Yazan Würden Sie etwas vorschlagen bitte eine Lösung? –

+1

Ja, ich habe bereits vorgeschlagen, den nicht-entzogenen Geschmack von 'onReceivedError()' zu verwenden, da es aus deinem Code nicht klar ist, ob du ihn benutzt oder den veralteten benutzt hast. es gibt auch eine andere Methode 'onReceivedHttpError()' versuchen, es zu orverride. - Das ist alles, was ich kann helfen mit – Yazan

Antwort

1

Nun gibt es zwei Möglichkeiten für Sie auf dieser die loadURL

entweder lassen() starten und den Fehler behandeln später onReceivedError mit()

view.setWebViewClient(new WebViewClient() { 
    @override 
    public void onPageFinished(WebView view, String url) { 
     // do your stuff here 
     logo.setVisibility(View.INVISIBLE); 
     splashScreen.setVisibility(View.INVISIBLE); 
     view.setVisibility(View.VISIBLE); 
    } 

    @override 
    void onReceivedError (WebView view, 
     WebResourceRequest request, 
     WebResourceError error){ 
      if(error.getErrorCode() == WebViewClient.ERROR_CONNECT || error.getErrorCode() == WebViewClient.ERROR_HOST_LOOKUP || WebViewClient.ERROR_TIMEOUT){ 
       Toast.makeText(context, "you are not connected!", Toast.LENGTH_LONG); 
       //do other stuff, hide views ... 
      } 
     } 
}); 

versucht, alle Verbindungsfehler zu handhaben , full list of error codes can be found here

oder die IsOnline() Methode von this answer loadURL einzuwickeln verwenden() -Aufruf bedarf der Genehmigung android.permission.ACCESS_NETWORK_STATE

if(!isOnline()){ 
    Toast.makeText(context, "you are not connected!", Toast.LENGTH_LONG); 
}else{ 
    view.loadUrl(url); 
} 

wenn erste Option ist, was Sie brauchen, ist es besser sein könnte, denn ohne tatsächliche Internet-Verbindung Wifi verbunden sind werden Sie falsche Ergebnis.