您好我正在编写一个使用网络服务器坐标的应用程序。我知道如何从webservice中检索坐标,但是一旦我得到它们,我怎么能在地图上不断显示它们。类似于位置监听器,当位置管理器的位置发生变化时,会更新地图上的点。我想不断更新从webservice收到的积分。 这是用服务完成的吗?如果是这样的话?
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);
}
更新:从webservice获取坐标的代码......
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");
}
更新TIMER:
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
答案 0 :(得分:2)
您可以做的是使用timer
填充地图。基本上,您可以使用一种方法与服务器联系,获取坐标并将其添加到arraylist中。现在可以从计时器内部调用此方法(可以每隔几秒运行一次,具体取决于您的需要)。此外,在此计时器类中,您可以重新填充地图。一些代码:
timer=new Timer(); // Refresh map via timer task.
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.
Handler handler = new Handler();
handler.post(new Runnable(){
public void run(){
//add the overlays to the map
// and call invalidate for the mapview.
}
});
}
}, 0, 10000); // Here im calling the timer every 10 seconds
如果您想查看使用此想法的示例项目,请前往here,并查看onResume()
内的计时器。它使用另一个名为FetchParse
的类来联系服务器并获取更新的坐标列表。
答案 1 :(得分:0)
GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(),(int) event.getY());
Drawable srcdrawable = getApplicationContext().getResources().getDrawable(R.drawable.pin_blue);
CustomItemizedOverlay srcitemizedOverlay = new CustomItemizedOverlay(srcdrawable, getApplicationContext());
OverlayItem srcoverlayitem = new OverlayItem(p, "Hello!", "This is your Location.");
srcitemizedOverlay.addOverlay(srcoverlayitem);
mapView.getOverlays().clear();
mapView.getOverlays().add(srcitemizedOverlay);
在创建标记
中尝试此代码