Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止在没有互联网连接时点击url-android studio_Android_Android Studio_Webview - Fatal编程技术网

如何防止在没有互联网连接时点击url-android studio

如何防止在没有互联网连接时点击url-android studio,android,android-studio,webview,Android,Android Studio,Webview,我使用Android Studio在Android应用程序中转换我的网站。 我试图显示对话框时,没有互联网连接在开幕式上。它很好用 但问题是当应用程序仍在运行时,突然没有互联网连接。然后,如果单击url,webview将显示“网页不可用” MainActivity.java package com.example.myapp; import android.graphics.Bitmap; import android.provider.SyncStateContract; import a

我使用Android Studio在Android应用程序中转换我的网站。 我试图显示对话框时,没有互联网连接在开幕式上。它很好用

但问题是当应用程序仍在运行时,突然没有互联网连接。然后,如果单击url,webview将显示“网页不可用”

MainActivity.java

package com.example.myapp;

import android.graphics.Bitmap;
import android.provider.SyncStateContract;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private WebView mywebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (!DetectConnection.checkInternetConnection(this)) {
            try {
                AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();

                alertDialog.setTitle("Info");
                alertDialog.setMessage("Internet non disponible, Verifiez votre connexion internet et réessayez");
                alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
                alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Réessayer", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                        startActivity(getIntent());
                    }
                });

                alertDialog.show();
            } catch (Exception e) {

            }
        } else {
            mywebView = (WebView) findViewById(R.id.webview);
            WebSettings webSettings = mywebView.getSettings();
            mywebView.loadUrl("https://myapp.com/");
            mywebView.setWebViewClient(new WebViewClient());
            mywebView.clearCache(true);
            mywebView.clearHistory();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        }
    }

    public class myWebClient extends WebViewClient{
        @Override
        public void onPageStarted (WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
           view.loadUrl(url);
           return true;
        }
    }

    @Override
    public void onBackPressed (){
        if(mywebView.canGoBack()){
            mywebView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}
package com.example.mycollege;

import android.content.Context;
import android.net.ConnectivityManager;


public class DetectConnection {
    public static boolean checkInternetConnection(MainActivity context) {

        ConnectivityManager con_manager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);

        return (con_manager.getActiveNetworkInfo() != null
                && con_manager.getActiveNetworkInfo().isAvailable()
                && con_manager.getActiveNetworkInfo().isConnected());
    }
}
DetectConnection.java

package com.example.myapp;

import android.graphics.Bitmap;
import android.provider.SyncStateContract;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private WebView mywebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (!DetectConnection.checkInternetConnection(this)) {
            try {
                AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();

                alertDialog.setTitle("Info");
                alertDialog.setMessage("Internet non disponible, Verifiez votre connexion internet et réessayez");
                alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
                alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Réessayer", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                        startActivity(getIntent());
                    }
                });

                alertDialog.show();
            } catch (Exception e) {

            }
        } else {
            mywebView = (WebView) findViewById(R.id.webview);
            WebSettings webSettings = mywebView.getSettings();
            mywebView.loadUrl("https://myapp.com/");
            mywebView.setWebViewClient(new WebViewClient());
            mywebView.clearCache(true);
            mywebView.clearHistory();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        }
    }

    public class myWebClient extends WebViewClient{
        @Override
        public void onPageStarted (WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
           view.loadUrl(url);
           return true;
        }
    }

    @Override
    public void onBackPressed (){
        if(mywebView.canGoBack()){
            mywebView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}
package com.example.mycollege;

import android.content.Context;
import android.net.ConnectivityManager;


public class DetectConnection {
    public static boolean checkInternetConnection(MainActivity context) {

        ConnectivityManager con_manager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);

        return (con_manager.getActiveNetworkInfo() != null
                && con_manager.getActiveNetworkInfo().isAvailable()
                && con_manager.getActiveNetworkInfo().isConnected());
    }
}
我想知道如何防止在未检测到连接时单击将默认页面“网页不可用”替换为对话框“没有internet,请检查您的连接!”。
有什么想法吗?

您的myWebClient课程将类似于:

// Function to load all URLs in same webview
private class myWebClient extends WebViewClient {
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (!DetectConnection.checkInternetConnection(this)) {
      Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show();
    } else {
      view.loadUrl(url);
    }     
    return true;
  }
}
检查内部的internet连接
应覆盖以下内容


谢谢。

首先:

在按钮的onClick方法中,首先检查internet是否可用

在活动中添加此方法:

  public static boolean isNetworkAvailable(Context context) {
    ConnectivityManager objConnectivityManager;
    try {
        objConnectivityManager = (ConnectivityManager) context.getSystemService(Activity.CONNECTIVITY_SERVICE);
        final boolean IsWifiAvailable = objConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();

        boolean IsInternetAvailable = false;
        if (objConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null)
            IsInternetAvailable = objConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
        if (IsWifiAvailable == true || IsInternetAvailable == true)
            return true;
        else
            return false;
    } catch (Exception e) {
        return false;
    }
}
然后在onClick中调用此方法

boolean isNetworkAvailable = CommonMethods.isNetworkAvailable(this);
        if (isNetworkAvailable){
            // Call the webpage
        }else {
            Toast.makeText(this, "No internet connection", Toast.LENGTH_SHORT).show();
        }
秒: 如果您询问有关-

  • 您正在使用应用程序

  • internet连接已打开

  • 但是服务器没有响应[没有互联网]


  • 然后在webview上使用超时。请参阅

    在单击时间时检查这两种方法,如果网络可用,则继续执行操作

    1-用于检查连接:

    private boolean isNetworkConnected() {
            ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
            return cm.getActiveNetworkInfo() != null;
        }
    
    2-检查互联网:

    public boolean internetIsConnected() {
            try {
                String command = "ping -c 1 google.com";
                return (Runtime.getRuntime().exec(command).waitFor() == 0);
            } catch (Exception e) {
                return false;
            }
        }
    
    将权限添加到清单:

    <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" />
    
    
    
    我将其更改为sir@Pratik Butani,但它会显示以下消息“错误:不兼容的类型:MainActivity.myWebClient无法转换为MainActivity”。错误请参考中的“this”!检测连接。检查Internet连接(此)。有什么想法吗?将
    this
    更改为
    MainActivity。我认为你应该学习一些基本概念,这些概念将有助于解决这类基本问题。我将此更改为MainActivity。这样就没有错误了。但这并不能解决问题。所以@Makarand先生,你叫什么CommonMethods?@MohamedFall CommonMethod是一个单独的类。为项目需要的常用方法创建。只需在其中复制并粘贴isNetworkAvailable方法,然后您就可以从任何地方调用它。