【问题标题】:Offline Page is getting loaded when internet connection is available互联网连接可用时正在加载离线页面
【发布时间】:2022-01-18 10:07:19
【问题描述】:

尝试构建/测试具有在线和离线功能的 android WebView 应用程序。

但即使有互联网连接,它也总是加载离线页面。

MainActivity.java

package com.trial_test.app;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebView;
import java.net.InetAddress;


public class MainActivity extends Activity {

    private WebView mWebView;

    @Override
    @SuppressLint("SetJavaScriptEnabled")
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = findViewById(R.id.activity_main_webview);
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        mWebView.setWebViewClient(new MyWebViewClient());

        if (isNetworkConnected()) {

            boolean is_test = isInternetAvailable();
            
            if (isInternetAvailable()) {
                
                // REMOTE RESOURCE
                mWebView.loadUrl("https://example.com");
            } else {
                // LOCAL RESOURCE
                mWebView.loadUrl("file:///android_asset/index.html");
            }
        } else {
            // LOCAL RESOURCE
            mWebView.loadUrl("file:///android_asset/index.html");
        }


        }



    @Override
    public void onBackPressed() {
        if(mWebView.canGoBack()) {
            mWebView.goBack();
        } else {
            super.onBackPressed();
        }
    }


    private boolean isNetworkConnected() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
    }

    public boolean isInternetAvailable() {
        try {
            InetAddress ipAddr = InetAddress.getByName("google.com");
            
            //You can replace it with your name
            return ipAddr.equals("");

        } catch (Exception e) {
            
            return false;
        }
    }


}

尝试构建/测试具有在线和离线功能的 android WebView 应用程序。

但即使有互联网连接,它也总是加载离线页面。

尝试构建/测试具有在线和离线功能的 android WebView 应用程序。

但即使有互联网连接,它也总是加载离线页面。

files

【问题讨论】:

    标签: java android android-studio webview inet


    【解决方案1】:

    这还不足以检查互联网连接, 你可以试试这个

    public class NetworkState {
    
        public Boolean isNetworkAvailable(Context context)  {
            if (context == null)
                return false;
            ConnectivityManager connectivityManager =
                    (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                NetworkCapabilities capabilities =
                        connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
                if (capabilities != null) {
                    if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                        return true;
                    } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                        return true;
                    } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
                        return true;
                    }
                }
            } else {
                try {
                    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
                    if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
    //                        Log.i("update_statut", "Network is available : true")
                        return true;
                    }
                } catch ( Exception e) {
    
                }
            }
            Log.e("update_statut", "Network is available : FALSE ");
            return false;
        }
    }
    

    然后检查您的连接

     NetworkState networkState =new NetworkState();
    if (networkState.isNetworkAvailable(this)) {
                //You are online
    }else{
            //You are offline
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-15
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2019-12-25
      相关资源
      最近更新 更多