Yesterdy my App работал отлично, но сегодня утром он начал крутиться. Я думаю, что триггер состоял в том, что я перезагрузил свой смартфон, поэтому мой APP выпустил GPS-данные. Я начал режим отладки и выглядел шаг за шагом для значений NULL, и я actuelly найти его с помощью этой команды:Google API - указатель NULL по getLastKnownLocation
myLocation = locationManager.getLastKnownLocation(provider);
Это возвращает объект NULL, который вызывает к аварии, когда я пытаюсь использовать эти методы:
latitude = myLocation.getLatitude();
longtitude = myLocation.getLongitude();
Как я могу сделать так, чтобы в этом случае мое местоположение не было NULL? Я попытался использовать NETWORK_PROVIDER, но потом мне нужно использовать WLAN, и это не самый лучший способ, я думаю. Могу ли я по-прежнему получать информацию с помощью GPS_PROVIDER, чтобы не попасть в другое приложение, которое их сохранит?
КСТАТИ вот мой код:
public class gmapps extends FragmentActivity {
private GoogleMap googleMap;
TextView txt_street , txt_city , txt_country ;
Geocoder geocoder;
List<Address> addresses;
ImageView btn_yes;
Location myLocation;
String address , city , country;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
txt_street = (TextView)findViewById(R.id.txt_coordinates);
txt_city = (TextView)findViewById(R.id.txt_city);
txt_country = (TextView)findViewById(R.id.txt_country);
btn_yes = (ImageView)findViewById(R.id.btn_yes);
setUpIfNeeded();
}
private void setUpIfNeeded() {
if (googleMap == null)
{
try{
googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
}catch(Exception e){}
if (googleMap != null)
{
setUpMap();
}
}
}
private void setUpMap() {
googleMap.setMyLocationEnabled(true);
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria , true);
myLocation = locationManager.getLastKnownLocation(provider); // Here I get the NULL
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
double latitude = myLocation.getLatitude();
double longtitude = myLocation.getLongitude();
LatLng latLng = new LatLng(latitude , longtitude);
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(17));
try {
convert_adresses(latitude,longtitude);
} catch (IOException e) {
e.printStackTrace();
}
txt_street.setText(address);
txt_city.setText(city);
txt_country.setText(country);
}
public void convert_adresses (double lat , double lng) throws IOException
{
geocoder = new Geocoder(this, Locale.getDefault());
addresses = geocoder.getFromLocation(lat, lng, 1);
address = addresses.get(0).getAddressLine(0);
city = addresses.get(0).getAddressLine(1);
country = addresses.get(0).getAddressLine(2);
}
Спасибо всем!
Итак, если приложение не переписало данные GPS, я не могу получить их и вернуться к ним? Правильно ли я это понял? Когда это будет так, это не лучший способ, не так ли? –
да, вы должны пропустить адрес отелей, хранящихся в вашей базе данных. – Jigar
Нам необходимо изменить нашу базу данных по мере необходимости, если вы хотите обеспечить хорошие функциональные возможности – Jigar