我正在获取设备的纬度和经度,并将它们发送到我正在运行的服务器,它将更新数据库中的值。没有问题获得的位置和服务器工作正常但我收到错误消息:
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,但我不确定它是什么,我还在读它。
感谢您给予的任何帮助。
答案 0 :(得分:1)
<强> NetworkOnMainThreadException 强>
应用程序尝试在其主线程上执行网络操作时引发的异常。
仅针对Honeycomb SDK或更高版本的应用程序进行此操作。针对早期SDK版本的应用程序可以在其主要事件循环线程上进行网络连接,但是非常不鼓励这样做。请参阅文档Designing for Responsiveness。
使用AsyncTask
,Thread
或Service
代替使用活动主线,
最佳选择是将您的网络操作置于AsyncTask's doINBackGround()
方法。