I can get the first overlayItem to appear on the map but not any items after that.
Example of the code:
Using java Syntax Highlighting
- protected void myCalledFunction(Location myLoc) {
- // TODO Auto-generated method stub
- Markers usersMarker = new Markers(user,overview.this);
- int lat,lon;
- HttpEntity ser_resp;
- String text;
- /* Add my location to the list */
- if (myLoc != null) {
- GeoPoint myPoint = new GeoPoint(
- (int) (myLoc.getLatitude() * 1E6),
- (int) (myLoc.getLongitude() * 1E6));
- mc.animateTo(myPoint);
- OverlayItem itemMyself = new OverlayItem(myPoint,getString(R.string.myPosition),getString(R.string.myPosition));
- itemMyself.setMarker(this.icon);
- usersMarker.addOverlay(itemMyself);
- }
- if (this.userid != -1) {
- Map<String, String> data = new HashMap<String, String>();
- data.put("userid", this.userid.toString());
- try {
- HttpResponse re = Registration.doPost("http://www.android-town.com/getCloseUsers.php",data);
- ser_resp = re.getEntity();
- InputStream is = ser_resp.getContent();
- BufferedInputStream bis = new BufferedInputStream(is);
- ByteArrayBuffer baf = new ByteArrayBuffer(20);
- int current = 0;
- while((current = bis.read()) != -1){
- baf.append((byte)current);
- }
- /* Convert the Bytes read to a String. */
- text = new String(baf.toByteArray());
- /* If the web service returns nearby users... */
- if (text != "") {
- if (text.indexOf("##")>0) {
- String[] users = text.split("##");
- for (String user : users) {
- String[] userData = user.split(";");
- lat = Integer.valueOf(userData[1]);
- lon = Integer.valueOf(userData[2]);
- Log.e("overview", "username: "+userData[0]+", lat: "+userData[1]+", lon: "+userData[2]);
- GeoPoint p = new GeoPoint(
- (int) (lat * 1E6),
- (int) (lon * 1E6));
- OverlayItem item = new OverlayItem(p,userData[0],userData[3]);
- item.setMarker(this.user);
- usersMarker.addOverlay(item);
- }
- } else {
- String[] userData = text.split(";");
- lat = Integer.valueOf(userData[1]);
- lon = Integer.valueOf(userData[2]);
- Log.e("overview", "username: "+userData[0]+", lat: "+userData[1]+", lon: "+userData[2]);
- GeoPoint p = new GeoPoint(
- (int) (lat * 1E6),
- (int) (lon * 1E6));
- OverlayItem item = new OverlayItem(p,userData[0],userData[3]);
- item.setMarker(this.user);
- usersMarker.addOverlay(item);
- }
- }
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
- } catch (IOException e) {
- e.printStackTrace();
- Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
- }
- }
- /* Draw markers */
- //mc.setZoom(16);
- Log.e("overlays","items: "+String.valueOf(usersMarker.size())+", overlays: "+String.valueOf(mapOverlays.size()));
- if (mapOverlays.size() == 0) {
- mapOverlays.add(usersMarker);
- } else {
- mapOverlays.clear();
- mapOverlays.add(usersMarker);
- }
- karta.invalidate();
- }
Parsed in 0.047 seconds, using GeSHi 1.0.8.4
and my implementation of the ItemizedOverlay class:
Using java Syntax Highlighting
- public class Markers extends ItemizedOverlay {
- private Context ctx;
- private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
- public Markers(Drawable defaultMarker, Context cont) {
- super(boundCenterBottom(defaultMarker));
- this.ctx = cont;
- // TODO Auto-generated constructor stub
- }
- @Override
- protected OverlayItem createItem(int i) {
- // TODO Auto-generated method stub
- return mOverlays.get(i);
- }
- @Override
- public boolean onTap(GeoPoint p, MapView mapView) {
- // TODO Auto-generated method stub
- return super.onTap(p, mapView);
- }
- @Override
- protected boolean onTap(int index) {
- // TODO Auto-generated method stub
- Toast.makeText(this.ctx, mOverlays.get(index).getTitle().toString()+", Latitude: "+mOverlays.get(index).getPoint().getLatitudeE6(), Toast.LENGTH_SHORT).show();
- return super.onTap(index);
- }
- @Override
- public int size() {
- // TODO Auto-generated method stub
- return mOverlays.size();
- }
- public void addOverlay(OverlayItem item) {
- mOverlays.add(item);
- setLastFocusedIndex(-1);
- populate();
- }
- public void clear() {
- mOverlays.clear();
- setLastFocusedIndex(-1);
- populate();
- }
- }
Parsed in 0.035 seconds, using GeSHi 1.0.8.4
the first marker shows up on the map but if I add any more they don't show up? Is there a problem with the populate() method? I tried calling it manually after adding all markers but it still didn't help. Please, if you have any idea what could be wrong, say so.

