Ich versuche, eine Karte mit der Position der angegebenen Personen auf Google Map
erstellen. Ich habe einen Webserver mit MySQL-Datenbank eingerichtet. Immer wenn die Android-App ausgeführt wird, speichert sie den aktuellen Standort des Benutzers in der Datenbank. Danach, , wenn die onLocationChanged()
heißt, holt die App die Standortdaten von (sagen wir, 10 Personen) in der Nähe von (sagen wir 50Km) zum Benutzerstandort. Mithilfe dieser Positionskoordinaten habe ich mehrere Markierungen auf der Karte hinzugefügt. Jetzt bin ich mit Blick auf folgende Fragen:Google Maps Android: Live-Update-Position von mehreren Markierungen
Wenn die Standortdaten von 10 Personen Änderungen, neue Marker statt ursprünglichen Markierungs Änderung seiner Position geschaffen.
Wenn die Standortdaten einer der 10 Personen aus der Datenbank gelöscht werden, bleibt der entsprechende Marker auf der Karte.
Anmerkung: Ich bin mit JSON-Daten vom Server abzurufen und die JSON-Daten in einem IntentService
analysiert Marker zu erstellen.
Hier ist, wie ich JSON bin Parsen:
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
String json_result = intent.getExtras().getString("JSON Data");
try {
JSONObject jsonObject = new JSONObject(json_result);
JSONArray jsonArray = jsonObject.getJSONArray("location data");
int counter = 0;
String name, lat, lng;
double dist;
int arrayLength;
while (counter < jsonArray.length()) {
JSONObject object = jsonArray.getJSONObject(counter);
name = object.getString("name");
lat = object.getString("lat");
lng = object.getString("lng");
dist = object.getDouble("distance");
arrayLength = jsonArray.length();
Intent jsonDataIntent = new Intent();
jsonDataIntent.setAction(Constants.STRING_ACTION);
jsonDataIntent.putExtra(Constants.STRING_NAME, name);
jsonDataIntent.putExtra(Constants.STRING_LAT, lat);
jsonDataIntent.putExtra(Constants.STRING_LNG, lng);
jsonDataIntent.putExtra(Constants.STRING_DIST, dist);
jsonDataIntent.putExtra(Constants.STRING_LENGTH, arrayLength);
jsonDataIntent.putExtra(Constants.STRING_ID, counter);
LocalBroadcastManager.getInstance(this).sendBroadcast(jsonDataIntent);
counter++;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
Und hier ist, wie ich geparsten JSON-Daten verwendet haben, Marker zu erstellen:
private class ParseJSONDataReceiver extends BroadcastReceiver {
Marker usersMarker;
double lat, lng, dist;
int numberOfConnections, id;
HashMap<Marker,Integer> hashMap = new HashMap<>();
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
String name = intent.getExtras().getString(ParseJSONDataService.Constants.STRING_NAME);
lat = Double.parseDouble(intent.getExtras().getString(ParseJSONDataService.Constants.STRING_LAT));
lng = Double.parseDouble(intent.getExtras().getString(ParseJSONDataService.Constants.STRING_LNG));
dist = intent.getExtras().getDouble(ParseJSONDataService.Constants.STRING_DIST);
numberOfConnections = intent.getExtras().getInt(ParseJSONDataService.Constants.STRING_LENGTH);
id = intent.getExtras().getInt(ParseJSONDataService.Constants.STRING_ID) + 1;
usersMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(lat, lng))
.title("Name: " + name)
.snippet(id + ": Distance: " + dist + " Km")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
hashMap.put(usersMarker,id);
}
}
}
Kann jemand mir helfen über Probleme zu lösen ?? ??
Hallo Antonio. Vielen Dank für Ihre Antwort. Ich war in der Lage, die Position von Markern mit dem von Ihnen vorgeschlagenen Code erfolgreich zu aktualisieren. Allerdings bin ich mir nicht sicher, wie ich den "Löschmarker" -Code verwenden soll. Ich meine, wie die hashmap herausfinden wird, ob ein bestimmter Eintrag aus der MySQL-Datenbank gelöscht wurde? Ich habe versucht mit 'if (marker.getposition == null)' aber es funktioniert nicht. @Antonio –