IndexOutOfBoundsException showing while running my android program -
i doing android map oriented project. wrote code display direction between 2 places, works in lower android versions such 2.0, 2.2, etc. not working on android 4.0 , higher. when run code in android 4.0 shows indexoutofboundsexception.
my class
import java.io.inputstream; import java.util.arraylist; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import org.apache.http.httpresponse; import org.apache.http.client.httpclient; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.defaulthttpclient; import org.apache.http.protocol.basichttpcontext; import org.apache.http.protocol.httpcontext; import org.w3c.dom.document; import org.w3c.dom.node; import org.w3c.dom.nodelist; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; import android.graphics.point; import android.os.bundle; import android.widget.button; import com.google.android.maps.geopoint; import com.google.android.maps.mapactivity; import com.google.android.maps.mapcontroller; import com.google.android.maps.mapview; import com.google.android.maps.overlay; public class locationactivity extends mapactivity { mapview mv; mapcontroller mc; button save, cancel; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.map_places); mapview mv = (mapview)findviewbyid(r.id.mapview); mv.setbuiltinzoomcontrols(true); mapcontroller mc = mv.getcontroller(); arraylist<geopoint> all_geo_points = getdirections(10.154929, 76.390316, 10.015861, 76.341867); geopoint moveto = all_geo_points.get(0); mc.animateto(moveto); mc.setzoom(12); mv.getoverlays().add(new myoverlay(all_geo_points)); } public class myoverlay extends overlay { private arraylist<geopoint> all_geo_points; public myoverlay(arraylist<geopoint> allgeopoints) { super(); this.all_geo_points = allgeopoints; } @override public boolean draw(canvas canvas, mapview mv, boolean shadow, long when) { super.draw(canvas, mv, shadow); drawpath(mv, canvas); return true; } public void drawpath(mapview mv, canvas canvas) { int xprev = -1, yprev = -1, xnow = -1, ynow = -1; paint paint = new paint(); paint.setcolor(color.blue); paint.setstyle(paint.style.fill_and_stroke); paint.setstrokewidth(4); paint.setalpha(100); if (all_geo_points != null) (int = 0; < all_geo_points.size() - 4; i++) { geopoint gp = all_geo_points.get(i); point point = new point(); mv.getprojection().topixels(gp, point); xnow = point.x; ynow = point.y; if (xprev != -1) { canvas.drawline(xprev, yprev, xnow, ynow, paint); } xprev = xnow; yprev = ynow; } } } public static arraylist<geopoint> getdirections(double lat1, double lon1, double lat2, double lon2) { string url = "http://maps.googleapis.com/maps/api/directions/xml?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric"; string tag[] = {"lat", "lng"}; arraylist<geopoint> list_of_geopoints = new arraylist<geopoint>(); httpresponse response = null; try { httpclient httpclient = new defaulthttpclient(); httpcontext localcontext = new basichttpcontext(); httppost httppost = new httppost(url); response = httpclient.execute(httppost, localcontext); inputstream in = response.getentity().getcontent(); documentbuilder builder = documentbuilderfactory.newinstance().newdocumentbuilder(); document doc = builder.parse(in); if (doc != null) { nodelist nl1, nl2; nl1 = doc.getelementsbytagname(tag[0]); nl2 = doc.getelementsbytagname(tag[1]); if (nl1.getlength() > 0) { list_of_geopoints = new arraylist<geopoint>(); (int = 0; < nl1.getlength(); i++) { node node1 = nl1.item(i); node node2 = nl2.item(i); double lat = double.parsedouble(node1.gettextcontent()); double lng = double.parsedouble(node2.gettextcontent()); list_of_geopoints.add(new geopoint((int) (lat * 1e6), (int) (lng * 1e6))); } } else { // no points found } } } catch (exception e) { e.printstacktrace(); } return list_of_geopoints; } @override protected boolean isroutedisplayed() { // todo auto-generated method stub return true; } } my logcat
03-01 19:05:19.180: e/androidruntime(2839): fatal exception: main 03-01 19:05:19.180: e/androidruntime(2839): java.lang.runtimeexception: unable start activity componentinfo{com.kodspider.parkon/com.kodspider.parkon.locationactivity}: java.lang.indexoutofboundsexception: invalid index 0, size 0 03-01 19:05:19.180: e/androidruntime(2839): @ android.app.activitythread.performlaunchactivity(activitythread.java:2059) 03-01 19:05:19.180: e/androidruntime(2839): @ android.app.activitythread.startactivitynow(activitythread.java:1900) 03-01 19:05:19.180: e/androidruntime(2839): @ android.app.localactivitymanager.movetostate(localactivitymanager.java:135) 03-01 19:05:19.180: e/androidruntime(2839): @ android.app.localactivitymanager.startactivity(localactivitymanager.java:347) 03-01 19:05:19.180: e/androidruntime(2839): @ android.widget.tabhost$intentcontentstrategy.getcontentview(tabhost.java:694) 03-01 19:05:19.180: e/androidruntime(2839): @ android.widget.tabhost.setcurrenttab(tabhost.java:358) 03-01 19:05:19.180: e/androidruntime(2839): @ android.widget.tabhost$2.ontabselectionchanged(tabhost.java:150) 03-01 19:05:19.180: e/androidruntime(2839): @ android.widget.tabwidget$tabclicklistener.onclick(tabwidget.java:546) 03-01 19:05:19.180: e/androidruntime(2839): @ android.view.view.performclick(view.java:4084) 03-01 19:05:19.180: e/androidruntime(2839): @ android.view.view$performclick.run(view.java:16966) 03-01 19:05:19.180: e/androidruntime(2839): @ android.os.handler.handlecallback(handler.java:615) 03-01 19:05:19.180: e/androidruntime(2839): @ android.os.handler.dispatchmessage(handler.java:92) 03-01 19:05:19.180: e/androidruntime(2839): @ android.os.looper.loop(looper.java:137) 03-01 19:05:19.180: e/androidruntime(2839): @ android.app.activitythread.main(activitythread.java:4745) 03-01 19:05:19.180: e/androidruntime(2839): @ java.lang.reflect.method.invokenative(native method) 03-01 19:05:19.180: e/androidruntime(2839): @ java.lang.reflect.method.invoke(method.java:511) 03-01 19:05:19.180: e/androidruntime(2839): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:786) 03-01 19:05:19.180: e/androidruntime(2839): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) 03-01 19:05:19.180: e/androidruntime(2839): @ dalvik.system.nativestart.main(native method) 03-01 19:05:19.180: e/androidruntime(2839): caused by: java.lang.indexoutofboundsexception: invalid index 0, size 0 03-01 19:05:19.180: e/androidruntime(2839): @ java.util.arraylist.throwindexoutofboundsexception(arraylist.java:251) 03-01 19:05:19.180: e/androidruntime(2839): @ java.util.arraylist.get(arraylist.java:304) 03-01 19:05:19.180: e/androidruntime(2839): @ com.kodspider.parkon.locationactivity.oncreate(locationactivity.java:43) 03-01 19:05:19.180: e/androidruntime(2839): @ android.app.activity.performcreate(activity.java:5008) 03-01 19:05:19.180: e/androidruntime(2839): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1079) 03-01 19:05:19.180: e/androidruntime(2839): @ android.app.activitythread.performlaunchactivity(activitythread.java:2023) 03-01 19:05:19.180: e/androidruntime(2839): ... 18 more
so, basically, getdirections() returning empty arraylist, , you're trying access first item.
try understand why method returning empty set , fix that.
Comments
Post a Comment