我遇到了类似的问题,如果我打开了飞行模式,没有手机/wifi并且我运行我的应用程序,它将尝试不向我显示网络连接警报,而是尝试登录然后触发我的服务器不是的警报可达。
这是原始代码:
private void CheckNetworkState(Context context)
{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean error = true;
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if(activeNetwork != null)
if(activeNetwork.isConnected()&&activeNetwork.isAvailable())
error = false;
if(error)
ShowFatalAlert(context,"Internet Connection","This application requires an active internet connection to work!");
new CheckLogin().execute();
}
private void ShowFatalAlert(Context context, String title, String msg){
AlertDialog.Builder alert = new AlertDialog.Builder(context);
final AlertDialog ad = alert.create();
alert.setTitle(title);
alert.setMessage(msg);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
MainActivity.this.moveTaskToBack(true);
//android.os.Process.killProcess(android.os.Process.myPid());
}
});
alert.show();
if(ad.isShowing())
ad.dismiss();
}
@Override
public void onRestart(){
super.onRestart();
if(user.get(1)== "")
CheckNetworkState(this);
}
我遇到的问题是 checklogin 是一个异步任务,并且没有等待我的 ShowFatalAlert 函数完成。解决方案就像在 else 语句中移动异步执行一样简单:
if(error)
ShowFatalAlert(context,"Internet Connection","This application requires an active internet connection to work!");
else
new CheckLogin().execute();
不确定这对您的代码有多适用,也许您发布了调用 isNetworkAvailable 的代码?因为我不认为你对这个函数有问题,而是你如何处理它的返回。