Android & Google Maps вылетает на клиентском телефоне - PullRequest
0 голосов
/ 13 марта 2012

У меня есть вкладка, которая загружает вид карты, и когда я проверяю код на своем телефоне, он работает, но если я экспортирую APK и отправляю его клиенту, он падает, когда они открывают его.Они находятся в другой части страны, поэтому получение какой-либо полезной информации из них было ограничено.

Мой телефон работает с 2.2.1

Их телефон работает с 2.3.4

Я использую android: minSdkVersion = "7" в манифесте.

Я пробовал использовать различные версии Google api libs 2.3.3 работает на моей, но не на них Google 2.1 работает на моейно не их.

Остальная часть приложения работает, только карты на моем рушатся.

3.0 и позже все по каким-то причинам вылетают на моем.

Воткласс карты:

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


}

Любые идеи будут оценены.Я пока мало работал с картами.

Спасибо

1 Ответ

0 голосов
/ 13 марта 2012

Настройте учетную запись BugSense и интегрируйте ее в свое приложение, чтобы вы могли отслеживать сбои на других устройствах. Пока вы не узнаете, что такое исключение, будет очень трудно понять, в чем причина.

http://www.bugsense.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...