Fixed it, i removed the Overlays reference from the mapview and it worked :)
On 28 juin, 16:01, Necroline <adeline.hul...@gmail.com> wrote: > Hello everyone, > > As the title suggest i have (sometimes) a > concurrentmodificationexception while trying to create a route between > two locations ... > Here is my code (and in case you're wondering MyOverlay does not try > to access the other Overlays in the map) > > private class fillRouteTask extends AsyncTask<Void, GeoPoint, > Void> { > > /** > * create the url to call to get the route > * > * @param src > * @param dest > * @return > */ > private StringBuilder createUrl(GeoPoint src, GeoPoint dest) { > // connect to map web service > StringBuilder urlString = new StringBuilder(); > > urlString.append("http://maps.google.com/maps?f=d&hl=en"); > urlString.append("&saddr=");// from > urlString.append(Double > .toString((double) > src.getLatitudeE6() / 1.0E6)); > urlString.append(","); > urlString.append(Double > .toString((double) > src.getLongitudeE6() / 1.0E6)); > urlString.append("&daddr=");// to > urlString.append(Double > .toString((double) > dest.getLatitudeE6() / 1.0E6)); > urlString.append(","); > urlString.append(Double > .toString((double) > dest.getLongitudeE6() / 1.0E6)); > urlString.append("&ie=UTF8&0&om=0&output=kml"); > Log.d("xxx", "URL=" + urlString.toString()); > > return urlString; > } > > /** > * create the connection to google url > * > * @param src > * @param dest > * @return > */ > private String connectToUrl(GeoPoint src, GeoPoint dest) { > > // get the kml (XML) doc. And parse it to get the > // coordinates(direction > // route). > Document doc = null; > HttpURLConnection urlConnection = null; > URL url = null; > try { > url = new URL(createUrl(src, > dest).toString()); > urlConnection = (HttpURLConnection) > url.openConnection(); > urlConnection.setRequestMethod("GET"); > urlConnection.setDoOutput(true); > urlConnection.setDoInput(true); > urlConnection.connect(); > > DocumentBuilderFactory dbf = > DocumentBuilderFactory > .newInstance(); > DocumentBuilder db = dbf.newDocumentBuilder(); > doc = > db.parse(urlConnection.getInputStream()); > > if > (doc.getElementsByTagName("GeometryCollection") != null > && > doc.getElementsByTagName("GeometryCollection") > .getLength() > > 0) { > return > doc.getElementsByTagName("GeometryCollection").item( > > 0).getFirstChild().getFirstChild().getFirstChild() > .getNodeValue(); > } > > } catch (MalformedURLException e) { > Log.d("test", e.getLocalizedMessage()); > } catch (IOException e) { > Log.d("test", e.getLocalizedMessage()); > } catch (ParserConfigurationException e) { > Log.d("test", e.getLocalizedMessage()); > } catch (SAXException e) { > Log.d("test", e.getLocalizedMessage()); > } > return null; > } > > protected Void doInBackground(Void... arg0) { > try { > // get the current overlays present in the map > List<Overlay> overs = > Collections.synchronizedList(mapView > .getOverlays()); > String path = connectToUrl(orig, dest); > if (path != null) { > Log.d("xxx", "path=" + path); > String[] pairs = path.split(" "); > String[] lngLat = pairs[0].split(","); > > GeoPoint startGP = new GeoPoint((int) > (Double > > .parseDouble(lngLat[1]) * 1E6), (int) (Double > > .parseDouble(lngLat[0]) * 1E6)); > > overs.add(new MyOverlay(startGP, > startGP, 1)); > GeoPoint gp1; > GeoPoint gp2 = startGP; > for (int i = 1; i < pairs.length; > i++) // the last one would > // be > // crash > { > lngLat = pairs[i].split(","); > gp1 = gp2; > // watch out! For GeoPoint, > first:latitude, > // second:longitude > gp2 = new GeoPoint( > (int) > (Double.parseDouble(lngLat[1]) * 1E6), > (int) > (Double.parseDouble(lngLat[0]) * 1E6)); > Log.d("xxx", "pair:" + > pairs[i]); > publishProgress(gp1, gp2); > } > overs.add(new MyOverlay(dest, dest, > 3)); // use > // the > // default > // color > drawn = false; > } else { > m_handler.post(new Runnable() { > > public void run() { > > Toast.makeText(getApplicationContext(), > > "Problem in getting the directions", > > Toast.LENGTH_SHORT).show(); > } > }); > } > } catch (Exception e) { > m_handler.post(new Runnable() { > > public void run() { > > Toast.makeText(getApplicationContext(), > > R.string.errorrouteLoad, Toast.LENGTH_LONG) > .show(); > } > }); > } > return null; > > } > > /* > * (non-Javadoc) > * > * @see android.os.AsyncTask#onProgressUpdate(Progress[]) > */ > @Override > protected void onProgressUpdate(GeoPoint... values) { > // TODO Auto-generated method stub > List<Overlay> overs = > Collections.synchronizedList(mapView > .getOverlays()); > overs.add(new MyOverlay(values[0], values[1], 2, > 0x0000ff)); > > } > > /* > * (non-Javadoc) > * > * @see android.os.AsyncTask#onPostExecute(java.lang.Object) > */ > @Override > protected void onPostExecute(Void result) { > // TODO Auto-generated method stub > Log.d("routing", "done"); > mapView.postInvalidate(); > } > } -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en