Layout soll Informationen von Marker in einer Map anzeigen

  • Antworten:2
  • GeschlossenNicht stickyNicht beantwortet
  • Forum-Beiträge: 1

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

  • Forum-Beiträge: 374

14.04.2017, 16:47:22 via Website

Hallo Maxi, Peter, Dominik, Androide usw. usf. Das ist doch wahnsinnig umständlich sich laufend neue Accounts anzulegen, um die immer gleichen Probleme vorzustellen. Ganz ernsthafter Rat: Da es sich ja um ein kommerzielles Produkt handelt, gib den Krempel doch einer Android-Bude, die dir das komplett in ein paar Wochen runterprogrammiert. Das ist dann wesentlich schneller, als sich programmierwissen- und grundlagenbefreit seit Monaten durch die Foren zu quälen.

Schont außerdem den Blutdruck von Stefan.

swa00

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.171

14.04.2017, 17:44:20 via Website

Hallo Maxi | Dominik...
doppelaccounts mit den gleichen Fragen sind hier nicht gern gesehen.
Bitte checke auch mal deine Emails dafür.
Da wir ja schon einen Threads dazu haben, kann es da ja auch weitergehen:
https://www.androidpit.de/forum/738532/mehrere-map-marker-in-mapview-laden

PS: Ich erlaube mir mal Stefan zu zitieren:

Und genau das ist mit Grundlagen gemeint :
Das hat nix mit deinen Maps zu tun, sondern mit deinem fehlenden Basis-Wissen.

Ohne ergeiz die Grundlagen zu erlernen wird hier auch keiner gewillt sein dir zu helfen...
Zudem hast du schonmal den Debugger und Log ausgaben benutzt um dem Problem auf den Grund zu gehen??
Soviel nur dazu...

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Empfohlene Artikel