简单的Android客户端服务器提供NetworkOnMainThreadException

时间:2012-01-24 12:38:26

标签: android sockets exception networking

我正在获取设备的纬度和经度,并将它们发送到我正在运行的服务器,它将更新数据库中的值。没有问题获得的位置和服务器工作正常但我收到错误消息:

    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 个答案:

答案 0 :(得分:1)

<强> NetworkOnMainThreadException

应用程序尝试在其主线程上执行网络操作时引发的异常。

仅针对Honeycomb SDK或更高版本的应用程序进行此操作。针对早期SDK版本的应用程序可以在其主要事件循环线程上进行网络连接,但是非常不鼓励这样做。请参阅文档Designing for Responsiveness

使用AsyncTaskThreadService代替使用活动主线

最佳选择是将您的网络操作置于AsyncTask's doINBackGround()方法。