GetLastKnownLocation возвращает NULL

Я только что получил это, но когда я отключил свой Wi-Fi, чтобы узнать, могу ли я получить более точное местоположение с помощью своего GPS, теперь он приносит мне ошибку NullPointer и я не понимаю, почему.

Следующий код вызывается первым;

  public void onConnected(Bundle dataBundle) { connected = true; //Request an update from the location client to get current Location details mLocationClient.requestLocationUpdates(mLocationRequest,this); Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); } 

Который влечет за собой вызов этого метода

 public void onLocationChanged(android.location.Location location) { // Report to the UI that the location was updated String msg = "Updated Location: " + Double.toString(location.getLatitude()) + "," + Double.toString(location.getLongitude()); if(tmp != location.getLatitude()) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } tmp = location.getLatitude(); } 

Вы можете видеть, что у меня есть 2 тоста, и они возвращаются с фактическими координатами GPS, но когда я вызываю код ниже, он вылетает на новой строке местоположения getLastKnownLocation

 public String getLocation() { // Get the location manager LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, false); android.location.Location location = locationManager.getLastKnownLocation(bestProvider); Double lat,lon; DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); try { lat = location.getLatitude (); lon = location.getLongitude (); Toast.makeText(this,""+lat.toString()+"-"+lon.toString(),Toast.LENGTH_SHORT).show(); return new LatLng(lat, lon).toString(); } catch (NullPointerException e){ Toast.makeText(this,"HELL-NO",Toast.LENGTH_SHORT).show(); Log.e("HELL-NO","n",e); e.printStackTrace(); return null; } } 

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

Вы смешиваете новый и старый API местоположения вместе, когда не хотите.

Чтобы получить последнее известное местоположение, все, что вам нужно сделать, это позвонить

 mLocationClient.getLastLocation(); 

Как только служба определения местоположения была подключена.

Прочитайте, как использовать новый API местоположения

http://developer.android.com/training/location/retrieve-current.html#GetLocation

Я просто изменил

 locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) to locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); 

Это решило решение для меня. Полный фрагмент:

 map = ((MapFragment) getFragmentManager(). findFragmentById(R.id.map)).getMap(); map.setMyLocationEnabled(true); locationManager = (LocationManager)getSystemService (Context.LOCATION_SERVICE); getLastLocation = locationManager.getLastKnownLocation (LocationManager.PASSIVE_PROVIDER); currentLongitude = getLastLocation.getLongitude(); currentLatitude = getLastLocation.getLatitude(); currentLocation = new LatLng(currentLatitude, currentLongitude); 

Надеюсь это поможет.

Я долго боролся с этим. Но Google только придумал решение.

 googleMap.getMyLocation(); 

Чтобы получить местоположение синей точки на api V2.

Попробуйте этот код:

 LocationManager mLocationManager; Location myLocation = getLastKnownLocation(); private Location getLastKnownLocation() { mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE); List<String> providers = mLocationManager.getProviders(true); Location bestLocation = null; for (String provider : providers) { Location l = mLocationManager.getLastKnownLocation(provider); if (l == null) { continue; } if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) { // Found best last known location: %s", l); bestLocation = l; } } return bestLocation; }