Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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
Android 正在检查网络连接_Android_Multithreading_Network Connection - Fatal编程技术网

Android 正在检查网络连接

Android 正在检查网络连接,android,multithreading,network-connection,Android,Multithreading,Network Connection,这是我的代码,用于检查我的应用程序的网络连接。我希望我的应用程序仅在连接到网络时运行,如果未连接到网络,则关闭它。代码运行时没有出现错误,但问题是alertdialog显示了很多次 private void checkConnectivity(){ final Thread checkConnection = new Thread(new Runnable(){ @Override public void run()

这是我的代码,用于检查我的应用程序的网络连接。我希望我的应用程序仅在连接到网络时运行,如果未连接到网络,则关闭它。代码运行时没有出现错误,但问题是alertdialog显示了很多次

private void checkConnectivity(){

      final Thread checkConnection = new Thread(new Runnable(){
            @Override
            public void run()
            {

                while (checkCon == true){
                if(!isNetworkAvailable(MainActivity.this)) {

                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            new AlertDialog.Builder(MainActivity.this)
                            .setMessage("No network connection.")   
                            .setCancelable(false)
                            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface d, int which) {                                 
                                    checkCon = false;
                                    finish();

                                }
                             }).show();                                                         


                        }
                    });                         
                    } else {
                        checkCon = true;
                    }

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                }}
        });
        checkConnection.start();


  }

以哈里斯的方式回答,谢谢

  private void checkConnectivity(){

      final Thread checkConnection = new Thread(new Runnable(){
            @Override
            public void run()
            {

                while (checkCon == true){
                if(!isNetworkAvailable(MainActivity.this)) {

                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            new AlertDialog.Builder(MainActivity.this)
                            .setMessage("No network connection.")   
                            .setCancelable(false)
                            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface d, int which) {                                 

                                    finish();                                       
                                }

                             }).show(); 
                             checkCon = false;
                        }
                    });                         
                    } else {
                        checkCon = true;
                    }

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                }}
        });
        checkConnection.start();


  }

在当前的
活动
片段
中添加新方法:

private boolean isNetworkAvailable(){
        boolean available = false;
        /** Getting the system's connectivity service */
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        /** Getting active network interface  to get the network's status */
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

        if(networkInfo !=null && networkInfo.isAvailable())
            available = true;

        /** Returning the status of the network */
        return available;
    }
下面是如何使用它。您可以在
onCreate()方法中使用它:

if (isNetworkAvailable() == true){ // if network is available
   // do your thing here
   ...
}else{ // "else" means that the network is not available
   // do your thing here
   ...
}

为什么使用
循环?从代码上看,如果在显示/创建对话框的位置(不仅仅是在用户关闭对话框之后)设置checkCon=false,似乎最容易修复。当前,循环似乎一直在重新创建对话框,直到用户关闭其中一个对话框。如果我们不使用任何循环(如运行方法中的while循环),则线程
run()
方法始终只运行一次。所以请删除它然后检查谢谢哈里斯回答了我的问题检查这个链接