我有一个Android应用程序,其中包含将数据发布到服务器的语句。
HttpResponse httpresponse = httpclient.execute(httppost);
当我启动应用程序时,此语句执行正常。我在启动后自动启动了应用程序。当它启动时,我在此行获取IOEXCeption,并显示消息我的主机名。主机一直在运行,因为当我手动启动应用程序时,同一语句正常工作。仅在手机启动时才会出现此问题。
之前有没有人遇到过这个问题?
CommansWare, 我在onReceive调用中有这个新方法来检查网络连接。有了这个,我的问题得到了解决,这意味着它发布了“in boot Completed”消息并继续成功执行http请求但看起来它并没有退出while看起来像无法显示的“非在线”消息。怎么会发生?这不是正确的解决方案吗?
public void onReceive(Context context, Intent intent)
{
while(!isOnline(context) )
{
Toast toast = Toast.makeText(context, "Not online", Toast.LENGTH_SHORT);
toast.show();
}
Toast toast = Toast.makeText(context, "in boot completed", Toast.LENGTH_SHORT);
toast.show();
}
}
protected boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected())
{
Toast toast = Toast.makeText(context, "returned true", Toast.LENGTH_SHORT);
toast.show();
return true;
}
else
{
Toast toast = Toast.makeText(context, "returned false", Toast.LENGTH_SHORT);
toast.show();
return false;
}
}
答案 0 :(得分:3)
此时可能没有活动的Internet连接。毕竟,设备刚刚关闭电源。这与任何其他操作系统没什么不同。
您可能需要做一些事情来延迟HTTP操作,直到Internet连接可用为止。例如,您的BOOT_COMPLETED
接收方可以使用AlarmManager
和set()
安排在几分钟内再次获得控制权,届时设备将更加稳定。当然,您还需要使用ConnectivityManager
来确定当时是否还有Internet连接,并且您可能更喜欢做一些复杂的接收器工作来监听ConnectivityManager
广播,也许你的HTTP工作比AlarmManager
路由更快。