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);
}
}
答
嗯,有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);
}
如果第一个选择是你所需要的,它可能是更好,因为连接到无线上网的没有实际的互联网连接会给你假的结果。
我在代码中看不到'onReceivedError()'的重写,也请注意,上面的答案中的方法已被弃用,还有另一种风格。 https://developer.android.com/reference/android/webkit/WebViewClient.html,也有'onReceivedHttpError()',可能是你需要的 – Yazan
@Yazan你愿意提出一些解决方案吗? –
是的,我已经建议使用'onReceivedError()'的非depricated风格,因为如果你使用了它或者使用了不推荐使用的代码,那么它在代码中就不清楚了。另外还有另一种方法'onReceivedHttpError()'尝试取消它。 - 这就是我可以帮到 – Yazan