Note that there are some explanatory texts on larger screens.

plurals
  1. POCannot run Android maps v2 on android version 2.3.5 but working on ICS
    primarykey
    data
    text
    <p>I am developing an app in which an activity locates the current latitude and longitude and then draws a polyline from current location to a given(hardcoded) location.But the problem is that the activity is working perfectly fine on Android 4.x but not on gingerbread even though I have properly included support library and used support map fragment.</p> <p>When I run my activity on 4.x above it works fine but on gingerbread the activity starts and then sometimes the markers appear and then app is restarted,sometimes even markers does not appear and after trying for 4-5 times a fatal error(not always) is shown by the OS(activity crashes).</p> <p>I cannot post my logcat here because I cannot debug my app using eclipse as I cannot find valid drivers for my device.</p> <p>The code snippets are:</p> <p>The code of my activity is</p> <pre><code>package si.scrolls2013; import java.util.ArrayList; import org.w3c.dom.Document; import android.graphics.Color; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.widget.Toast; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.maps.model.PolylineOptions; public class NavigationActivity extends FragmentActivity { // Google Map private GoogleMap googleMap; GMapV2Direction md; //Document Document doc; //location GPSTracker gps; LatLng fromPosition; LatLng toPosition = new LatLng(28.675751, 77.502818); double latitude; double longitude; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_activity); try { // Loading map initilizeMap(); } catch (Exception e) { e.printStackTrace(); } } /** * function to load map. If map is not created it will create it for you * */ private void initilizeMap() { md = new GMapV2Direction(); googleMap = ((SupportMapFragment)getSupportFragmentManager() .findFragmentById(R.id.map)).getMap(); gps = new GPSTracker(NavigationActivity.this); // check if GPS enabled if(gps.canGetLocation()){ latitude = gps.getLatitude(); longitude = gps.getLongitude(); Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); }else{ // can't get location // GPS or Network is not enabled // Ask user to enable GPS/network in settings gps.showSettingsAlert(); } fromPosition= new LatLng(latitude, longitude); LatLng coordinates = new LatLng(latitude, longitude); googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 14)); googleMap.addMarker(new MarkerOptions().position(fromPosition).title("Start")); googleMap.addMarker(new MarkerOptions().position(toPosition).title("End")); new MapDraw().execute(); } @Override protected void onResume() { super.onResume(); initilizeMap(); } class MapDraw extends AsyncTask&lt;String, String, String&gt; { @Override protected String doInBackground(String... params) { doc = md.getDocument(fromPosition, toPosition, GMapV2Direction.MODE_DRIVING); md.getDurationValue(doc); md.getDistanceText(doc); md.getStartAddress(doc); md.getCopyRights(doc); return null; } protected void onPostExecute(String url) { ArrayList&lt;LatLng&gt; directionPoint = md.getDirection(doc); PolylineOptions rectLine = new PolylineOptions().width(3).color(Color.RED); for(int i = 0 ; i &lt; directionPoint.size() ; i++) { rectLine.add(directionPoint.get(i)); } googleMap.addPolyline(rectLine); } } } </code></pre> <p>the manifest file is:</p> <pre><code> &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="si.scrolls2013" android:versionCode="1" android:versionName="1.0" &gt; &lt;uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /&gt; /&gt; &lt;permission android:name="si.scrolls2013.permission.MAPS_RECEIVE" android:protectionLevel="signature" /&gt; &lt;uses-permission android:name="si.scrolls2013.permission.MAPS_RECEIVE" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt; &lt;uses-permission android:name="android.permission.INTERNET" /&gt; &lt;uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /&gt; &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt; &lt;!-- Required to show current location --&gt; &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt; &lt;!-- Required OpenGL ES 2.0. for Maps V2 --&gt; &lt;uses-feature android:glEsVersion="0x00020000" android:required="true" /&gt; &lt;application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" &gt; &lt;activity android:name="si.scrolls2013.MainActivity" android:label="@string/app_name" &gt; &lt;/activity&gt; &lt;activity android:name="si.scrolls2013.Details" android:label="@string/app_name" &gt; &lt;/activity&gt; &lt;activity android:name="si.scrolls2013.QueryActivity" android:label="@string/app_name" &gt; &lt;/activity&gt; &lt;activity android:name="si.scrolls2013.TopicsActivity" android:label="@string/app_name" &gt; &lt;/activity&gt; &lt;activity android:name="si.scrolls2013.NavigationActivity" android:label="@string/app_name" &gt; &lt;/activity&gt; &lt;activity android:name="si.scrolls2013.IdCardDetails" android:label="@string/app_name" &gt; &lt;/activity&gt; &lt;activity android:name="si.scrolls2013.IdCardActivity" android:label="@string/app_name" &gt; &lt;/activity&gt; &lt;activity android:name="si.scrolls2013.Scrolls" android:label="@string/app_name" &gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;/activity&gt; &lt;meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="xxxxx" /&gt; &lt;uses-library android:name="com.google.android.maps" android:required="true" /&gt; &lt;/application&gt; &lt;/manifest&gt; </code></pre> <p>the layout file for navigation activity is:</p> <pre><code> &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" &gt; &lt;fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /&gt; &lt;/RelativeLayout&gt; </code></pre> <p>EDIT:</p> <p>Did find out that problem occurs if </p> <blockquote> <p><strong>new MapDraw().execute();</strong></p> </blockquote> <p>is executed in the activity and if I comment it out then other things work fine:</p> <p>The code of GMapV2Direction class is:</p> <pre><code> package si.scrolls2013; 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 com.google.android.gms.maps.model.LatLng; import android.content.Context; import android.util.Log; public class GMapV2Direction { public final static String MODE_DRIVING = "driving"; public final static String MODE_WALKING = "walking"; public GMapV2Direction() { } public Document getDocument(LatLng start, LatLng end, String mode) { String url = "http://maps.googleapis.com/maps/api/directions/xml?" + "origin=" + start.latitude + "," + start.longitude + "&amp;destination=" + end.latitude + "," + end.longitude + "&amp;sensor=false&amp;units=metric&amp;mode=driving"; try { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(url); HttpResponse response = httpClient.execute(httpPost, localContext); InputStream in = response.getEntity().getContent(); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(in); return doc; } catch (Exception e) { e.printStackTrace(); } return null; } public String getDurationText (Document doc) { NodeList nl1 = doc.getElementsByTagName("duration"); Node node1 = nl1.item(0); NodeList nl2 = node1.getChildNodes(); Node node2 = nl2.item(getNodeIndex(nl2, "text")); Log.i("DurationText", node2.getTextContent()); return node2.getTextContent(); } public int getDurationValue (Document doc) { NodeList nl1 = doc.getElementsByTagName("duration"); Node node1 = nl1.item(0); NodeList nl2 = node1.getChildNodes(); Node node2 = nl2.item(getNodeIndex(nl2, "value")); Log.i("DurationValue", node2.getTextContent()); return Integer.parseInt(node2.getTextContent()); } public String getDistanceText (Document doc) { NodeList nl1 = doc.getElementsByTagName("distance"); Node node1 = nl1.item(0); NodeList nl2 = node1.getChildNodes(); Node node2 = nl2.item(getNodeIndex(nl2, "text")); Log.i("DistanceText", node2.getTextContent()); return node2.getTextContent(); } public int getDistanceValue (Document doc) { NodeList nl1 = doc.getElementsByTagName("distance"); Node node1 = nl1.item(0); NodeList nl2 = node1.getChildNodes(); Node node2 = nl2.item(getNodeIndex(nl2, "value")); Log.i("DistanceValue", node2.getTextContent()); return Integer.parseInt(node2.getTextContent()); } public String getStartAddress (Document doc) { NodeList nl1 = doc.getElementsByTagName("start_address"); Node node1 = nl1.item(0); Log.i("StartAddress", node1.getTextContent()); return node1.getTextContent(); } public String getEndAddress (Document doc) { NodeList nl1 = doc.getElementsByTagName("end_address"); Node node1 = nl1.item(0); Log.i("StartAddress", node1.getTextContent()); return node1.getTextContent(); } public String getCopyRights (Document doc) { NodeList nl1 = doc.getElementsByTagName("copyrights"); Node node1 = nl1.item(0); Log.i("CopyRights", node1.getTextContent()); return node1.getTextContent(); } public ArrayList&lt;LatLng&gt; getDirection (Document doc) { NodeList nl1, nl2, nl3; ArrayList&lt;LatLng&gt; listGeopoints = new ArrayList&lt;LatLng&gt;(); nl1 = doc.getElementsByTagName("step"); if (nl1.getLength() &gt; 0) { for (int i = 0; i &lt; nl1.getLength(); i++) { Node node1 = nl1.item(i); nl2 = node1.getChildNodes(); Node locationNode = nl2.item(getNodeIndex(nl2, "start_location")); nl3 = locationNode.getChildNodes(); Node latNode = nl3.item(getNodeIndex(nl3, "lat")); double lat = Double.parseDouble(latNode.getTextContent()); Node lngNode = nl3.item(getNodeIndex(nl3, "lng")); double lng = Double.parseDouble(lngNode.getTextContent()); listGeopoints.add(new LatLng(lat, lng)); locationNode = nl2.item(getNodeIndex(nl2, "polyline")); nl3 = locationNode.getChildNodes(); latNode = nl3.item(getNodeIndex(nl3, "points")); ArrayList&lt;LatLng&gt; arr = decodePoly(latNode.getTextContent()); for(int j = 0 ; j &lt; arr.size() ; j++) { listGeopoints.add(new LatLng(arr.get(j).latitude, arr.get(j).longitude)); } locationNode = nl2.item(getNodeIndex(nl2, "end_location")); nl3 = locationNode.getChildNodes(); latNode = nl3.item(getNodeIndex(nl3, "lat")); lat = Double.parseDouble(latNode.getTextContent()); lngNode = nl3.item(getNodeIndex(nl3, "lng")); lng = Double.parseDouble(lngNode.getTextContent()); listGeopoints.add(new LatLng(lat, lng)); } } return listGeopoints; } private int getNodeIndex(NodeList nl, String nodename) { for(int i = 0 ; i &lt; nl.getLength() ; i++) { if(nl.item(i).getNodeName().equals(nodename)) return i; } return -1; } private ArrayList&lt;LatLng&gt; decodePoly(String encoded) { ArrayList&lt;LatLng&gt; poly = new ArrayList&lt;LatLng&gt;(); int index = 0, len = encoded.length(); int lat = 0, lng = 0; while (index &lt; len) { int b, shift = 0, result = 0; do { b = encoded.charAt(index++) - 63; result |= (b &amp; 0x1f) &lt;&lt; shift; shift += 5; } while (b &gt;= 0x20); int dlat = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.charAt(index++) - 63; result |= (b &amp; 0x1f) &lt;&lt; shift; shift += 5; } while (b &gt;= 0x20); int dlng = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1)); lng += dlng; LatLng position = new LatLng((double) lat / 1E5, (double) lng / 1E5); poly.add(position); } return poly; } </code></pre> <p>}</p> <p>so are their any comptability issues with GMapV2Direction class?<br> `</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

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