BOOT_COMPLETED中的HTTP请求期间的IOException

时间:2011-10-20 00:24:22

标签: android httpclient boot

我有一个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;
            }
        }

1 个答案:

答案 0 :(得分:3)

此时可能没有活动的Internet连接。毕竟,设备刚刚关闭电源。这与任何其他操作系统没什么不同。

您可能需要做一些事情来延迟HTTP操作,直到Internet连接可用为止。例如,您的BOOT_COMPLETED接收方可以使用AlarmManagerset()安排在几分钟内再次获得控制权,届时设备将更加稳定。当然,您还需要使用ConnectivityManager来确定当时是否还有Internet连接,并且您可能更喜欢做一些复杂的接收器工作来监听ConnectivityManager广播,也许你的HTTP工作比AlarmManager路由更快。