android - 当 webview 中无法访问互联网并隐藏 url 时,如何在 android 中显示消息?

标签 android webview

当 webview 中无法访问互联网并隐藏 URL 时,如何在 android 应用程序中显示消息?如果互联网连接不可用,我不想显示 URL 和进度条。

这是我的代码。请给我正确的代码。我是 android 的初学者。

public class WebViewClientDemoActivity extends Activity {
    /** Called when the activity is first created. */

    WebView web;
    ProgressBar progressBar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        web = (WebView) findViewById(R.id.webview01);
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);

        web.setWebViewClient(new myWebClient());
        web.getSettings().setJavaScriptEnabled(true);
        web.loadUrl("http://www.vijaytutorials.com/mo");
    }

    public class myWebClient extends WebViewClient
    {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub

            view.loadUrl(url);
            return true;

        }

        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

            progressBar.setVisibility(View.GONE);
        }
    }

    // To handle "Back" key press event for WebView to go back to previous screen.
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
            web.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

最佳答案

我遇到了同样的问题。我刚才解决了。我所做的是,如果设备处于脱机状态,则自定义 html 会显示一条消息,显示它无法连接到互联网的原因。 将其复制粘贴到您的 WebView Activity 中。

final Activity activity = this;

mainWebView.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                 String summary =
                 "<html><body>Could not connect to the server.</body></html>";
                 mainWebView.loadData(summary, "text/html", null);

                Toast.makeText(activity, "" + description, Toast.LENGTH_SHORT)
                        .show();
            }
        });

        webview.loadUrl("http://www.tipfortechs.com/");

然后使用以下代码检查设备是否连接到互联网,在同一 Activity 中添加以下代码。

private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }

最后不要忘记在您的 list 中使用权限。

  <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

希望对您有所帮助。 您的代码已编辑:

import android.app.Activity;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;

/*
 * Demo of creating an application to open any URL inside the application and clicking on any link from that URl 
should not open Native browser but  that URL should open in the same screen.

- Load WebView with progress bar
 */
public class WebViewClientDemoActivity extends Activity {
    /** Called when the activity is first created. */

    WebView web;
    ProgressBar progressBar;
    final Activity activity = this;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        web = (WebView) findViewById(R.id.webview01);
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);

        web.setWebViewClient(new myWebClient());
        web.getSettings().setJavaScriptEnabled(true);



        web.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                 String summary =
                 "<html><body>Could not connect to the server.</body></html>";
                 web.loadData(summary, "text/html", null);

                Toast.makeText(activity, "" + description, Toast.LENGTH_SHORT)
                        .show();
            }
        });


        web.loadUrl("http://www.vijaytutorials.com/mo");
    }

    public class myWebClient extends WebViewClient
    {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub

            view.loadUrl(url);
            return true;

        }

        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

            progressBar.setVisibility(View.GONE);
        }
    }

    // To handle "Back" key press event for WebView to go back to previous screen.
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
            web.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }
}

关于android - 当 webview 中无法访问互联网并隐藏 url 时,如何在 android 中显示消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17883802/

相关文章:

javascript - Google 图表 API 无法正常工作

java - 将 channel 向上/向下按钮与 Android TV 应用程序链接

android - 如何清理在 WebView 中创建的 session ?

objective-c - 在 WebKit 中,如何获取资源的内容?

android - 在 android 4.4 上加载 Assets 文件时未捕获 ReferenceError

Flutter - 如何使用 webview_flutter 包播放 Google Drive 视频预览

android - 防止 Activity 的多个实例,但仍使用 onActivityResult

android - CSS @keyframes 动画闪烁

java - 我应该为android中的类中的计算字段定义属性或函数吗?

android - 如何卸载卡巴斯基移动安全