Простой Android-клиент для сервера, предоставляющий исключение NetworkOnMainThreadException - PullRequest
0 голосов
/ 24 января 2012

Я получаю широту и долготу устройства и отправляю их на сервер, на котором я работаю, который обновит значения в базе данных. Нет проблем с получением позиций, и сервер работает нормально, но я получаю сообщение об ошибке:

    android.os.NetworkOnMainThreadException

Код:

    sendGPS.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v){
            ObjectOutputStream oos = null;

            String Header = "GPSUpdate";
            String Userid = "07000000001";
            String Latitude = latitudeBox.getText().toString();
            String Longitude = longitudeBox.getText().toString();

            try{
                Socket socket = new Socket("igor.gold.ac.uk", 3000);
                oos = new ObjectOutputStream(socket.getOutputStream());

                UserObject userObject = new UserObject();
                userObject.setHeader(Header);
                userObject.setUserid(Userid);
                userObject.setLatitude(Latitude);
                userObject.setLongitude(Longitude);

                oos.writeObject(userObject);
                oos.flush();
                oos.close();
            }
            catch(Exception e){
                latitudeBox.setText("Error: " + e);
            }
        }
    });
}

}

Я слышал об Asynctask, но немного не уверен в том, что это такое, и все еще читаю об этом.

Спасибо за любую помощь.

1 Ответ

1 голос
/ 24 января 2012

NetworkOnMainThreadException

Исключение, которое выдается, когда приложение пытается выполнить сетевую операцию в своем основном потоке.

Это выбрасывается только для приложений, ориентированных на Honeycomb SDK или выше. Приложениям, нацеленным на более ранние версии SDK, разрешено создавать сети в своих основных потоках цикла событий, но это сильно не рекомендуется. См. Документ Проектирование для отзывчивости .

Вместо использования основной поток действия используйте для него AsyncTask, Thread или Service,

Наилучшим вариантом будет использование вашей сети в методе AsyncTask's doINBackGround().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...