Android WebView导航错误信息

问题描述:

目前还不清楚如何实现导航/互联网连接错误。Android WebView导航错误信息

我试图代码从这里Android WebView onReceivedError()

,但它不工作。

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

我在代码中看不到'onReceivedError()'的重写,也请注意,上面的答案中的方法已被弃用,还有另一种风格。 https://developer.android.com/reference/android/webkit/WebViewClient.html,也有'onReceivedHttpError()',可能是你需要的 – Yazan

+0

@Yazan你愿意提出一些解决方案吗? –

+1

是的,我已经建议使用'onReceivedError()'的非depricated风格,因为如果你使用了它或者使用了不推荐使用的代码,那么它在代码中就不清楚了。另外还有另一种方法'onReceivedHttpError()'尝试取消它。 - 这就是我可以帮到 – Yazan

嗯,有2个选项供您在本

要么让使用loadURL()启动和处理后使用onReceivedError()错误

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 ... 
      } 
     } 
}); 

试图处理所有连接错误,full list of error codes can be found here

或者使用this answer的isOnline()方法来封装loadUrl()调用 需要许可android.permission.ACCESS_NETWORK_STATE

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

如果第一个选择是你所需要的,它可能是更好,因为连接到无线上网的没有实际的互联网连接会给你假的结果。