- Forum-Beiträge: 1
14.04.2017, 15:57:55 via Website
14.04.2017 15:57:55 via Website
Hallo,
ich habe eine Map, in der Marker angezeigt werden. Die Marker werden aus einem Json gelesen. Jetzt möchte ich, dass wenn ich einen Marker anklicke, dass zusätzlicher Inhalt zu dem Marker angezeigt wird, der auch im JSon hinterlegt ist (Straße, Hausnummer etc).Folgendes habe ich hierfür versucht:
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback
@Override
protected void onCreate( Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
contactList = new ArrayList<>();
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map3);
mapFragment.getMapAsync(this);
ImageButton locations = (ImageButton) findViewById(R.id.btnloc);
locations.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MapsActivity.this, Locations.class);
startActivity(i);
}
});
}
private class GetContacts extends AsyncTask {
@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 street = c.getString("street");
String postalcode = c.getString("postalcode");
String musicstyle = c.getString("musicstyle");
String musicsecond = c.getString("musicsecond");
String entry = c.getString("entry");
String opening = c.getString("opening");
String agegroup = c.getString("agegroup");
String imageurl = c.getString("imageurl");
String urlbtn = c.getString("urlbtn");
String Fsk = c.getString("Fsk");
String city = c.getString("city");
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("street",street);
contact.put("postalcode",postalcode);
contact.put("musicstyle",musicstyle);
contact.put("musicsecond",musicsecond);
contact.put("entry",entry);
contact.put("opening",opening);
contact.put("agegroup",agegroup);
contact.put("imageurl",imageurl);
contact.put("urlbtn",urlbtn);
contact.put("Fsk",Fsk);
contact.put("city",city);
contact.put("lat", lat);
contact.put("lng", lng);
latitude = Double.parseDouble(lat); longitude = Double.parseDouble(lng);
contactList.add(contact);
namec = lat;
Imageurl = imageurl;
}
} 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);
for (final HashMap<String, String> contact: contactList) {
LatLng P1 = new LatLng(
Double.parseDouble(contact.get("lat")),
Double.parseDouble(contact.get("lng")));
mMap.addMarker(new MarkerOptions().position(P1).title(contact.get("name")));
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
prev.setVisibility(View.VISIBLE);
TextView nameprev = (TextView) findViewById(R.id.namepre);
nameprev.setText(contact.get("name"));
Toast.makeText(getApplicationContext(),contact.get("name"),Toast.LENGTH_LONG).show();
return false;
}
});
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
LinearLayout prev = (LinearLayout) findViewById(R.id.preview);
prev.setVisibility(View.INVISIBLE);
TextView nameprev = (TextView) findViewById(R.id.namepre);
nameprev.setText("Clubname");
}
});
}
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
new GetContacts().execute();
mMap.setMyLocationEnabled(true);
}
Leider werden nun immer die Informationen zu dem letzten Json item angezeigt, egal welcher Marker angeklickt wird.
Ich hoffe mir kann hierbei jemand helfen
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.