我有一个使用互联网的应用程序。在发送请求之前,我使用代码检查连接:
protected boolean isNetworkAvailable(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean result = false;
if (null != activeNetwork) {
result = activeNetwork.isAvailable()
&& activeNetwork.isConnectedOrConnecting();
}
return result;
}
它运行良好但在极少数情况下,日志告诉我app无法执行请求,因为isNetworkAvailable返回false。没关系,直到用户重新确认我打开wifi并且他能够发送和接收电子邮件。那么你有什么想法可以解决这种情况吗?
答案 0 :(得分:0)
我有一个类似的问题,如果我打开飞机模式,没有手机/ 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是一个asynctask,并没有等待我的ShowFatalAlert函数完成。 解决方案就像在else语句中移动异步执行一样简单:
if(error)
ShowFatalAlert(context,"Internet Connection","This application requires an active internet connection to work!");
else
new CheckLogin().execute();
不确定这对您的代码有多适用,也许您发布了调用isNetworkAvailable的代码?因为我不认为你有这个功能的问题,但是你如何处理它的回归。