Android 正在检查网络连接
这是我的代码,用于检查我的应用程序的网络连接。我希望我的应用程序仅在连接到网络时运行,如果未连接到网络,则关闭它。代码运行时没有出现错误,但问题是alertdialog显示了很多次Android 正在检查网络连接,android,multithreading,network-connection,Android,Multithreading,Network Connection,这是我的代码,用于检查我的应用程序的网络连接。我希望我的应用程序仅在连接到网络时运行,如果未连接到网络,则关闭它。代码运行时没有出现错误,但问题是alertdialog显示了很多次 private void checkConnectivity(){ final Thread checkConnection = new Thread(new Runnable(){ @Override public void run()
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()
方法始终只运行一次。所以请删除它然后检查谢谢哈里斯回答了我的问题检查这个链接