IOException во время HTTP-запроса в BOOT_COMPLETED - PullRequest
1 голос
/ 20 октября 2011

У меня есть приложение для Android с этим утверждением, которое отправляет данные на сервер.

HttpResponse httpresponse = httpclient.execute(httppost);

Когда я запускаю приложение, этот оператор выполняется нормально. Я сделал мое приложение автоматически запускается после загрузки. Когда это загружается, я получаю IOEXCeption в этой строке с сообщением мое имя хоста. Хост работает все время, так как тот же оператор работает нормально, когда я запускаю приложение вручную. Эта проблема возникает только при загрузке телефона.

Кто-нибудь сталкивался с этой проблемой раньше?


CommansWare, У меня есть этот новый метод в моем вызове onReceive для проверки сетевого подключения. С этим моя проблема решена, то есть она отправляет сообщение «in boot Completed» и продолжает успешно выполнять http-запрос, но похоже, что он не завершает работу, пока сообщение «not online» появляется бесконечно. Как это может случиться? Разве это не правильное решение?

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 Ответ

3 голосов
/ 20 октября 2011

Возможно, в данный момент активное интернет-соединение отсутствует. Ведь устройство просто включилось от выключения. Это ничем не отличается от любой другой ОС.

Возможно, вам придется что-то сделать, чтобы отложить выполнение HTTP-операций до тех пор, пока не будет доступно подключение к Интернету. Например, ваш BOOT_COMPLETED приемник может использовать AlarmManager и set(), чтобы организовать повторный контроль через несколько минут, и к этому времени устройство, как мы надеемся, станет более стабильным. Конечно, вы также захотите использовать ConnectivityManager, чтобы определить, есть ли подключение к Интернету в то же время, и вы можете предпочесть выполнить сложную работу с приемником, чтобы прослушать ConnectivityManager трансляцию, чтобы, возможно, выполнить ваш HTTP. работать немного быстрее, чем с маршрутом AlarmManager.

...