2012-03-13 3 views
0

J'ai une tabview qui charge une mapview et quand je teste le code sur mon téléphone cela fonctionne, mais si j'exporte l'APK et l'envoie au client, il se bloque quand ils l'ouvrent . Ils sont dans une partie différente du pays, donc obtenir des informations utiles sur eux a été limitée.Android et Google Maps se bloque sur le téléphone client

Mon téléphone est en cours d'exécution 2.2.1

Leur téléphone est en cours d'exécution 2.3.4

J'utilise Android: minSdkVersion = "7" dans le manifeste.

J'ai essayé d'utiliser diverses versions de Google api libs 2.3.3 fonctionne sur le mien mais pas pour eux Google 2.1 fonctionne sur le mien mais pas le leur.

Le reste de l'application fonctionne, juste les cartes se brisent sur le mien.

3.0 et plus tard tous se brisent sur le mien pour une raison quelconque.

est ici la classe carte:

public class GPSLocatorActivity extends MapActivity implements LocationListener { 
    private MapView map=null; 
    private MyLocationOverlay me=null; 
    private LocationManager lm; 
    private MyLocationOverlay lo; 
    private double latit; 
    private double lonit; 
    private ArrayList<HashMap<String, String>> thelist; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    initLocation(); 
    map=(MapView)findViewById(R.id.mapView); 
    //json stuff 
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, myjasonfeedurlString>>(); 
    // Log.e("log_tag", "here we are at url "+latit); 
    String url = "http://myjsonlocation/json.php?la=" + latit + "&lo=" + lonit; 
    //Log.e("log_tag", "here is url "+url); 
    JSONObject json = getJSONfromURL(url); 

    try{ 
    JSONArray earthquakes = json.getJSONArray("locations"); 
    //Loop the Array 
    for(int i=0;i < earthquakes.length();i++){      

    HashMap<String, String> hmap = new HashMap<String, String>(); 
    JSONObject e = earthquakes.getJSONObject(i); 
    hmap.put("id", String.valueOf(i)); 
    hmap.put("name", e.getString("name")); 
    hmap.put("latitude", e.getString("lat")); 
    hmap.put("longitude", e.getString("lon")); 
    hmap.put("street", e.getString("street")); 
    //Log.e("log_tag", "Here's what I pulled "+e.getString("name")); 
    mylist.add(hmap); 
    } 
    thelist = mylist; 
    } 
    catch(JSONException e)  { 
    // Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 
    map.getController().setCenter(getPoint(latit, 
      lonit)); 
    map.getController().setZoom(14); 
    map.setBuiltInZoomControls(true); 

    Drawable marker=getResources().getDrawable(R.drawable.ball24); 

    marker.setBounds(0, 0, marker.getIntrinsicWidth(), 
          marker.getIntrinsicHeight()); 

    map.getOverlays().add(new SitesOverlay(marker)); 

    me=new MyLocationOverlay(this, map); 
    map.getOverlays().add(me); 
    } 

    @Override 
    public void onResume() { 
    super.onResume(); 

    // me.enableCompass(); 
    } 

    @Override 
    public void onPause() { 
    super.onPause(); 
    lo.disableMyLocation(); 
    // me.disableCompass(); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
    return(false); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_S) { 
     map.setSatellite(!map.isSatellite()); 
     return(true); 
    } 
    else if (keyCode == KeyEvent.KEYCODE_Z) { 
     map.displayZoomControls(true); 
     return(true); 
    } 

    return(super.onKeyDown(keyCode, event)); 
    } 

    private GeoPoint getPoint(double lat, double lon) { 
    return(new GeoPoint((int)(lat*1000000.0), 
          (int)(lon*1000000.0))); 
    } 

    private class SitesOverlay extends ItemizedOverlay<OverlayItem> { 
    private List<OverlayItem> items=new ArrayList<OverlayItem>(); 

    public SitesOverlay(Drawable marker) { 
     super(marker); 

     boundCenterBottom(marker); 
     for(int i=0;i < thelist.size();i++){ 
      Map<String, String> hmap = thelist.get(i); 
      double tlo = Double.valueOf(hmap.get("longitude")); 
      double tla = Double.valueOf(hmap.get("latitude")); 
      GeoPoint point = new GeoPoint((int)(tla*1E6),(int)(tlo*1E6)); 
      //Log.e("log_tag","geopoint : " + point +" me "+ (int)(latit*1000000.0) + " , " +(int)(lonit*1000000.0)); 

      items.add(new OverlayItem(point,hmap.get("name"), hmap.get("street"))); 

     } 


     items.add(new OverlayItem(getPoint(0.748963847316034, 
              -123.96807193756104), 
           "blank", "placeholder")); 

     populate(); 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return(items.get(i)); 
    } 

    @Override 
    protected boolean onTap(int i) { 
     Toast.makeText(GPSLocatorActivity.this, 
         items.get(i).getTitle() + " @ " + items.get(i).getSnippet(), 
         Toast.LENGTH_SHORT).show(); 

     return(true); 
    } 

    @Override 
    public int size() { 
     return(items.size()); 
    } 
    } 
    private void initLocation(){ 

     lm= (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);   
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 500, this); 
     Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     double longitude = location.getLongitude(); 
     double latitude = location.getLatitude(); 
     // Log.e("log_tag", "lat "+ latitude); 
     // Log.e("log_tag", "lon: "+ longitude); 
     latit = latitude; 
     lonit = longitude; 
} 



    public void onLocationChanged(Location arg0) { 
     List overlays = map.getOverlays(); 
     lo = new MyLocationOverlay(this,map); 
     overlays.add(lo); 
     lo.enableMyLocation(); 

    } 

    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

    //json 
    public static JSONObject getJSONfromURL(String url){ 

     //initialize 
     InputStream is = null; 
     String result = ""; 
     JSONObject jArray = null; 

     //http post 
     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

     }catch(Exception e){ 
      //Log.e("log_tag", "Error in http connection "+e.toString()); 
     } 

     //convert response to string 
     try{ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result=sb.toString(); 
     }catch(Exception e){ 
      //Log.e("log_tag", "Error converting result "+e.toString()); 
     } 

     //try parse the string to a JSON object 
     try{ 
       jArray = new JSONObject(result); 
     }catch(JSONException e){ 
      //Log.e("log_tag", "Error parsing data "+e.toString()); 
     } 

     return jArray; 
    } 
    //json 


} 

Toutes les idées seraient appréciées. Je n'ai pas encore beaucoup travaillé avec les cartes.

Merci

+0

Des erreurs dans logcat? –

+0

OK. J'ai ajouté bugsense et j'ai un pointeur nul sur l'emplacement. à la double longitude = location.getLongitude(); – legoist

+0

Je pense que vous venez de répondre à votre propre question .. –

Répondre

0

Mettre en place un compte BugSense et de l'intégrer dans votre application afin que vous puissiez suivre les accidents sur d'autres appareils. Jusqu'à ce que vous sachiez quelle est l'exception, il va être très difficile de savoir quelle est la cause.

http://www.bugsense.com/

Questions connexes