- Forum-Beiträge: 44
29.03.2017, 21:28:45 via Website
29.03.2017 21:28:45 via Website
Hallo Zusammen,
ich habe folgendes Problem:
ich würde gerne mehrer Marker an beliebigen Positionen in einer Map anzeigen.
Dazu habe ich mir einen JSOn gebastelt und einen hierfür passende HttpHandler.
Inn der MapsActivity werden dann die daten aus dem JSON geladen und angezeigt.
Leider wird nur einer angezeigt, obwohl in meinem JSON zwei hinterlegt sind. Ich weiss. dass ich hierfür eine Schleife brauche, weiss jedoch nicht, wie ich die formulieren soll, sodass alle Marker angezeigt werden.
Anbei findet ihr meine MapsActivity:
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private ProgressDialog pDialog;
private GoogleMap mMap;
private static String url="http://partypeople.bplaced.net/markers.json";
ArrayList<HashMap<String, String>> contactList;
private String TAG = MainActivity.class.getSimpleName();
double latitude;
double longitude;
String namec;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
contactList = new ArrayList<>();
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map3);
mapFragment.getMapAsync(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
ImageButton locations= (ImageButton) findViewById(R.id.imagebuttonLocations);
locations.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MapsActivity.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(i);
}
});
}
private class GetContacts extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray contacts = jsonObj.getJSONArray("contacts");
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("id");
String name = c.getString("name");
String address = c.getString("address");
String lat = c.getString("lat");
String lng = c.getString("lng");
// tmp hash map for single contact
HashMap<String, String> contact = new HashMap<>();
// adding each child node to HashMap key => value
contact.put("id", id);
contact.put("name", name);
contact.put("address",address);
contact.put("lat", lat);
contact.put("lng", lng);
latitude = Double.parseDouble(lat); longitude = Double.parseDouble(lng);
contactList.add(contact);
namec = name;
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
LatLng P1 = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(P1).title(namec));
mMap.moveCamera(CameraUpdateFactory.newLatLng(P1));
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
new GetContacts().execute();
mMap.setMyLocationEnabled(true);
}
}
Schöne Grüße
Dominik
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.