Note that there are some explanatory texts on larger screens.

plurals
  1. POadding Geopoints to ItemizedOverlay array failed
    text
    copied!<p>I've been trying to add my GeoPoints to the itemizedOverlay Array in order to draw the points on the map. Unfortunately, the app crashing at this point. </p> <p>My Code: package com.example.phooogle;</p> <pre><code>public class GoogleMapsAppActivity extends MapActivity { private MapView mapView; private MapController mc; private MyLocationOverlay myLocationOverlay; private myMapService mms; String[] ms; private LocationManager lm; private LocationListener locationListener; private MyLocationOverlay myLocOverlay; GeoPoint p; GeoPoint progress1[]; List&lt;GeoPoint&gt; geoPointsArray = new ArrayList&lt;GeoPoint&gt;(); int latitude; int longitude; private ProgressDialog progress; MotionEvent event; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cool_map); progress= new ProgressDialog(this); progress.setIndeterminate(true); progress.setMessage("I am thinking"); InitTask init_task= new InitTask(); init_task.execute("144.963620993985", "-37.8140023779914", "20", "Litter Bin"); try { String[] arrs = init_task.strArr2; //Log.d(" print points", " Array Size " + arrs.length); Drawable makerDefault = this.getResources().getDrawable(R.drawable.poke); MirItemizedOverlay itemizedOverlay = new MirItemizedOverlay(makerDefault); for(int j=0; j&lt;arrs.length ;j++) { double y =0; double x =0; if(j == 1) { /// x //Log.d("Results", "2If statem " + strArr2[j] ); x = Double.parseDouble(arrs[j]); y = Double.parseDouble(arrs[j+1]); //Log.d(" print points", "lat " + x + " long" + y); itemizedOverlay.addOverlayItem((int) x , (int) y , "La trobe"); mapView.getOverlays().add(itemizedOverlay ); } } MapController mc = mapView.getController(); mc.setCenter(new GeoPoint((int) (1E6 * -37.720754), (int) (1E6 * 145.048798))); // Some where . mc.zoomToSpan(itemizedOverlay.getLatSpanE6(), itemizedOverlay.getLonSpanE6()); } finally {} initMap(); initMyLocation(); // theRouteDraw(); /* Drawable makerDefault = this.getResources().getDrawable(R.drawable.poke); MirItemizedOverlay itemizedOverlay = new MirItemizedOverlay(makerDefault); itemizedOverlay.addOverlayItem(init_task.geoPointsArray, "La trobe"); mapView.getOverlays().add(itemizedOverlay ); MapController mc = mapView.getController(); mc.setCenter(new GeoPoint((int) (1E6 * -37.720754), (int) (1E6 * 145.048798))); // Some where . mc.zoomToSpan(itemizedOverlay.getLatSpanE6(), itemizedOverlay.getLonSpanE6()); for (int i = 0; i &lt; geoPointsArray.size() ; i++) { Log.d(" print points", " points " + geoPointsArray.get(i)); }*/ // Log.d(" print points", " Size " + init_task.geoPointsArray.size()); /* mapView = (MapView) findViewById(R.id.mapview); List&lt;Overlay&gt; mapOverlays = mapView.getOverlays(); //add any icon here for the marker Drawable drawable = GoogleMapsAppActivity.this.getResources().getDrawable(R.drawable.poke); MapViewItemizedOverlay itemizedOverlay = new MapViewItemizedOverlay(drawable,this); //use your array here instead //GeoPoint point1 = new GeoPoint(lat,lng); OverlayItem overlayitem1 = new OverlayItem(point1, "Info", "You are here!" ); itemizedOverlay.addOverlay(overlayitem1); mapOverlays.add(itemizedOverlay); */ } private void initMap() { mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); // mapView.setStreetView(true); mc = mapView.getController(); } public void theRouteDraw(GeoPoint p){ mc.animateTo(p); mc.setZoom(13); mapView.invalidate(); mapView.setSatellite(true); } private void initMyLocation() { myLocOverlay = new MyLocationOverlay(this, mapView); myLocOverlay.enableMyLocation(); mapView.getOverlays().add(new myLocOverlay()); } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } class myLocOverlay extends Overlay{ public void draw(Canvas canvas, MapView mapv, boolean shadow){ super.draw(canvas, mapv, shadow); Projection projection = mapView.getProjection(); Path p1 = new Path(); for (int i = 0; i &lt; geoPointsArray.size(); i++) { if (i == geoPointsArray.size() - 1) { break; } Point from = new Point(); Point to = new Point(); projection.toPixels(geoPointsArray.get(i), from); projection.toPixels(geoPointsArray.get(i + 1), to); p1.moveTo(from.x, from.y); p1.lineTo(to.x, to.y); } Paint mPaint = new Paint(); mPaint.setStyle(Style.STROKE); mPaint.setColor(Color.BLACK); mPaint.setAntiAlias(true); mPaint.setStrokeWidth(4); canvas.drawPath(p1, mPaint); super.draw(canvas, mapView, shadow); } } private class InitTask extends AsyncTask&lt;String, GeoPoint, List&lt;GeoPoint&gt;&gt; { List&lt;GeoPoint&gt; geoPointsArray = new ArrayList&lt;GeoPoint&gt;(); GeoPoint p; private ProgressDialog progressDialog; private String rst = " " ; private String[] strArr1; private String[] strArr2; protected void onPreExecute() { //progress.show(); } @Override protected List&lt;GeoPoint&gt; doInBackground(String... arg0) { String result = ""; int responseCode = 0; int executeCount = 0; HttpResponse response; StringBuilder sb = new StringBuilder(); String line; try { HttpClient client = new DefaultHttpClient(); HttpGet httppost = new HttpGet("http://xxxx/ccvo/mel-asset-data/query.php?lon="+ arg0[0].toString() + "&amp;lat="+ arg0[1].toString() +"&amp;within=" + arg0[2].toString() + "&amp;keyword="+ arg0[3].toString().replace(" ", "%20")); do { // progressDialog.setMessage("Passing paratmeters.. ("+(executeCount+1)+"/5)"); // Execute HTTP Post Request executeCount++; response = client.execute(httppost); responseCode = response.getStatusLine().getStatusCode(); } while (executeCount &lt; 5 &amp;&amp; responseCode == 408); BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); while ((line = rd.readLine()) != null) { result = line.trim(); sb.append(line); } }catch (Exception e2) { responseCode = 408; e2.printStackTrace(); } rst = result.toString(); // splits everything if(rst != null &amp;&amp; rst.length() &gt; 0) { strArr1 = rst.split("\\|"); for(int i=0;i&lt;strArr1.length;i++) { // Log.d("Results", "Array size1.1 " + i); Log.v("Results", "Array split1.2 " + strArr1[i] ); if(strArr1[i] != null &amp;&amp; strArr1[i].length() &gt;0 &amp;&amp; strArr1[i].contains(",")) { strArr2 = strArr1[i].split(","); for(int j=0; j&lt;strArr2.length ;j++) { double y =0; double x =0; if(j == 1) { /// x //Log.d("Results", "2If statem " + strArr2[j] ); x = Double.parseDouble(strArr2[j]); y = Double.parseDouble(strArr2[j+1]); geoPointsArray.add(new GeoPoint((int)(x*1e6), (int)(y*1e6))); Log.d("geoPointsArray", "geoPointsArray " + geoPointsArray.toString() ); } } } } } return geoPointsArray; } @Override protected void onProgressUpdate(GeoPoint... progress1) { theRouteDraw(progress1[0]); geoPointsArray.add(progress1[0]); int lon=progress1[0].getLongitudeE6(); int lat=progress1[0].getLatitudeE6(); GeoPoint p2=new GeoPoint(lon,lat); geoPointsArray.add(p2); initMyLocation(); } @Override protected void onPostExecute(List&lt;GeoPoint&gt; geoPointsArray) { //super.onPostExecute(geoPointsArray); progress.dismiss(); //startActivity(i); //i.getCharExtra("Geop", geoPointsArray); Log.d("Lista", " check " + geoPointsArray.size()); // theRouteDraw(geoPointsArray); } } } </code></pre> <p>My MirItemizedOverlay Class: </p> <pre><code>class MirItemizedOverlay extends ItemizedOverlay { private List&lt;OverlayItem&gt; mOverlays = new ArrayList&lt;OverlayItem&gt;(); public MirItemizedOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); // TODO Auto-generated constructor stub } @Override protected OverlayItem createItem(int i) { return mOverlays.get(i); } @Override public int size() { return mOverlays.size(); } public void addOverlayItem(OverlayItem overlayItem) { mOverlays.add(overlayItem); populate(); } @Override public boolean onTouchEvent(MotionEvent event, MapView mapView) { //---when user lifts his finger--- if (event.getAction() == 1) { GeoPoint p = mapView.getProjection().fromPixels( (int) event.getX(), (int) event.getY()); Toast.makeText(getBaseContext(), p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6() /1E6 , Toast.LENGTH_SHORT).show(); } return false; } private Context getBaseContext() { // TODO Auto-generated method stub return null; } public void addOverlayItem(int lat, int lon, String title) { GeoPoint point = new GeoPoint(lat, lon); OverlayItem overlayItem = new OverlayItem(point, title, null); addOverlayItem(overlayItem); } /* public void addOverlayItem(GeoPoint point , String title) { OverlayItem overlayItem = new OverlayItem(point, title, null); addOverlayItem(overlayItem); //GeoPoint point = new GeoPoint(lat, lon); }*/ } </code></pre> <p>The error : </p> <pre><code>: E/AndroidRuntime(2752): FATAL EXCEPTION: main : E/AndroidRuntime(2752): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.phooogle/com.example.phooogle.GoogleMapsAppActivity}: java.lang.NullPointerException : E/AndroidRuntime(2752): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) : E/AndroidRuntime(2752): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) : E/AndroidRuntime(2752): at android.app.ActivityThread.access$600(ActivityThread.java:130) : E/AndroidRuntime(2752): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) : E/AndroidRuntime(2752): at android.os.Handler.dispatchMessage(Handler.java:99) : E/AndroidRuntime(2752): at android.os.Looper.loop(Looper.java:137) : E/AndroidRuntime(2752): at android.app.ActivityThread.main(ActivityThread.java:4745) : E/AndroidRuntime(2752): at java.lang.reflect.Method.invokeNative(Native Method) : E/AndroidRuntime(2752): at java.lang.reflect.Method.invoke(Method.java:511) : E/AndroidRuntime(2752): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) : E/AndroidRuntime(2752): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) : E/AndroidRuntime(2752): at dalvik.system.NativeStart.main(Native Method) : E/AndroidRuntime(2752): Caused by: java.lang.NullPointerException : E/AndroidRuntime(2752): at com.example.phooogle.GoogleMapsAppActivity.onCreate(GoogleMapsAppActivity.java:68) </code></pre> <p>I've tried several ways to do like I tried to change the addOverlayItem method to accept the GeoPoitns from the AsyncTask return but also failed. I almost gave me on this. :)</p> <p><strong>Update</strong> The problem resolved. Here is the fix:</p> <pre><code>try { //String[] arrs = init_task.strArr2; List&lt;GeoPoint&gt; geoL = init_task.get(); //Log.d(" Get the size " , " Geo List " + geoL.get(1).toString()); mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); mc = mapView.getController(); List&lt;Overlay&gt; listOfOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.poke); MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable, this); for ( int i = 0; i &lt; geoL.size() ; i++) { OverlayItem overlayitem1 = new OverlayItem(geoL.get(i), Selectedword + "s found! " , "It's withing " + selectedDistance + " To your position"); itemizedoverlay.addOverlay(overlayitem1); listOfOverlays.add(itemizedoverlay); } //mc.animateTo(geoL.get(1)); mc.setCenter(new GeoPoint((int) (1E6 * gps.getLatitude() ), (int) (1E6 * gps.getLongitude() ))); // Some where . } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } finally {} initMap(); initMyLocation(); // theRouteDraw(); </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload