您好,我正在编写一个使用来自网络服务器的坐标的应用程序。我知道如何从网络服务中检索坐标,但是一旦我得到它们,我怎么能不断地在地图上显示它们。有点像位置监听器在位置管理器的位置更改时更新地图上的点。我想不断更新我从网络服务收到的积分。这是通过服务完成的吗?如果有怎么办?
public class GeoUpdateHandler implements LocationListener {
@Override
public void onLocationChanged(Location location) {
...
GeoPoint point = new GeoPoint(lat, lng);
createMarker();
mapController.animateTo(point); // mapController.setCenter(point);
}
更新: Createmarker 的代码
private void createMarker() {
GeoPoint p = mapView.getMapCenter();
OverlayItem overlayitem = new OverlayItem(p, "", "");
itemizedoverlay.addOverlay(overlayitem);
mapView.getOverlays().add(itemizedoverlay);
}
更新:从 web 服务获取坐标的代码...
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(".../android/serverFile.php");
JSONObject json = new JSONObject();
try {
JSONArray postjson=new JSONArray();
postjson.put(json);
// Execute HTTP Post Request
System.out.print(json);
HttpResponse response = httpclient.execute(httppost);
// for JSON:
if(response != null)
{
InputStream is = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String jsonStr = sb.toString();
JSONObject jsonObj = new JSONObject(jsonStr);
String longitudecord = jsonObj.getString("lon");
String latitudecord = jsonObj.getString("lat");
}
用定时器更新:
public void startService(){
timer.scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
//Call the method that contacts the server and
//adds the coordinates to a list. Get those values from the list.
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.kre8tiveinspired.com/android/serverFile.php");
JSONObject json = new JSONObject();
try {
// JSON data:
JSONArray postjson=new JSONArray();
postjson.put(json);
// Execute HTTP Post Request
System.out.print(json);
HttpResponse response = httpclient.execute(httppost);
// for JSON:
if(response != null)
{
InputStream is = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String jsonStr = sb.toString();
JSONObject jsonObj = new JSONObject(jsonStr);
// grabbing the menu object
String longitudecord = jsonObj.getString("lon");
String latitudecord = jsonObj.getString("lat");
latcord = latitudecord;
loncord = longitudecord;
}
}catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Handler handler = new Handler();
handler.post(new Runnable(){
public void run(){
double aDouble = Double.parseDouble(loncord);
double bDouble = Double.parseDouble(latcord);
int lat = (int) (aDouble * 1E6);
int lng = (int) (bDouble * 1E6);
GeoPoint point = new GeoPoint(lat, lng);
createMarker();
mapController.animateTo(point); // mapController.setCenter(point);
//add the overlays to the map
// and call invalidate for the mapview.
mapView.invalidate();
}
});
}
}, 0, 1000); // Here im calling the timer every 10 seconds