如果无法加载网页,如何在webview中显示默认图像

时间:2014-11-21 19:30:04

标签: android url webview android-webview internet-connection

我在布局中有一个WebView,它基本上加载了给定的url。一切都很好。 但是,当页面由于某些原因(如果WebView无法访问服务器或网页被删除)不可用时,WebView会显示“网页”不可用。 www.givenurl_something.com上的网页可能会暂时下降"等等 我想在WebView中显示存储在应用程序本身中的默认图像,而不是向用户显示此文本。 我的意思是当一切正常时,网页应该打开。否则,应显示默认图像,任何人都可以帮助我吗? 以下是我的代码。

public class WebviewActivity extends Activity {
// flag for Internet connection status
Boolean isInternetPresent = false;

// Connection detector class
ConnectionDetector cd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    getWindow().requestFeature(Window.FEATURE_PROGRESS);

    setContentView(R.layout.webview);
    cd = new ConnectionDetector(getApplicationContext());

    // Create ad request
    isInternetPresent = cd.isConnectingToInternet();
    if (isInternetPresent) {

        WebView w1 = (WebView) findViewById(R.id.webView1);
        w1.setWebViewClient(new WebViewClient());
        w1.getSettings().setJavaScriptEnabled(true);
        w1.getSettings().setBuiltInZoomControls(true);

        w1.loadUrl("http://www.google.com");
        WebClientClass webViewClient = new WebClientClass();
        w1.setWebViewClient(webViewClient);
        WebChromeClient webChromeClient = new WebChromeClient();
        w1.setWebChromeClient(webChromeClient);
    }

    else {

        showAlertDialog(WebviewActivity.this, "No Internet Connection",
                "You don't have internet connection.", false);
    }
}

public class WebClientClass extends WebViewClient {
    ProgressDialog pd = null;

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        pd = new ProgressDialog(WebviewActivity.this);
        pd.setTitle("Please wait");
        pd.setMessage("Page is loading..");
        pd.show();
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        pd.dismiss();
    }

}

public class WebChromeClass extends WebChromeClient {
}

public void showAlertDialog(Context context, String title, String message,
        Boolean status) {
    AlertDialog alertDialog = new AlertDialog.Builder(context).create();

    // Setting Dialog Title
    alertDialog.setTitle(title);

    // Setting Dialog Message
    alertDialog.setMessage(message);

    // Setting alert dialog icon
    // alertDialog.setIcon(R.id.action_mode_close_button);

    // Setting OK Button
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });

    // Showing Alert Message
    alertDialog.show();
}

2 个答案:

答案 0 :(得分:1)

您可以覆盖
onReceivedError(WebView视图,int errorCode,String description,String failingUrl)
WebViewClient类的功能。
当您在加载页面时webview收到任何错误时,您可以显示默认图像。您还可以检查错误代码以针对不同的故障情况加载不同的图像。

有关常量错误代码的详细信息,请参阅Android文档以获取WebViewClient: http://developer.android.com/reference/android/webkit/WebViewClient.html

答案 1 :(得分:1)

使用此代码覆盖您的错误页面并加载您自己的自定义页面。并将此自定义错误页面(myerrorpage.html)与资产文件夹中的自定义图像保持一致。

mWebView.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                mWebView.loadUrl("file:///android_asset/myerrorpage.html");

            }
        });