有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用AsyncTask检查internet连接并输出WebView内容的正确方法?

我的应用程序基于全屏WebView,如果没有互联网连接,我想显示一个本地文件,否则加载我的网站。我以前从未使用过AsyncTask,并尝试了以下方法:

MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Check Internet Connection
    mWebView = (WebView) findViewById(R.id.activity_main_webview);
    HostAvailabilityTask hostAvailable = new HostAvailabilityTask(this);
    boolean online = hostAvailable.isOnline();

    if (!online) {
        // Loading local html file into web view
        mWebView.loadUrl("file:///安卓_asset/sample.html");
    } else {
        // load my website here

HostAvailabilityTask

public class HostAvailabilityTask extends AsyncTask<String, Void, Boolean> {

    private MainActivity main;

    public HostAvailabilityTask(MainActivity main) {
        this.main = main;
    }

    protected Boolean doInBackground(String... params) {
        return isOnline(); // Correct way using AsyncTask?
    }

    protected void onPostExecute(Boolean... result) {
        if(!result[0]) {
            return; // What to return?
        }
    }

    public boolean isOnline() {
        Runtime runtime = Runtime.getRuntime();
        try {
            Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
            int     exitValue = ipProcess.waitFor();
            return (exitValue == 0);
        }
        catch (IOException e)          { e.printStackTrace(); }
        catch (InterruptedException e) { e.printStackTrace(); }

        return false;
    }
}

正如你所看到的,我只是在MainActivity中调用方法isOnline();,并且认为这是使用AsyncTask的错误方式?我只是想确保用“正确的方式”去做。我也不知道在这种情况下返回onPostExecute的逻辑是什么

如前所述,我从未使用过^{,所以我希望有人能帮助我。我还对代码中的一些行进行了注释,以澄清我的困惑


共 (1) 个答案

  1. # 1 楼答案

     @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){
               //Your code to do
            Toast.makeText(getActivity(), "Your Internet Connection May not be active Or " + error , Toast.LENGTH_LONG).show();
        }