java Gps android - 获取纬度和经度

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6100967/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 14:20:19  来源:igfitidea点击:

Gps android - getting Latitude and Longitude

javaandroidgeolocation

提问by Sergio

Can you help me with that.. application started to crash when I added the geocoder to get the name of the city by using latitude and longitude..

你能帮我解决这个问题吗..当我添加地理编码器以使用纬度和经度获取城市名称时,应用程序开始崩溃..

    double latitude, longitude;
    private TextView lala;

    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    longitude = location.getLongitude();
    latitude = location.getLatitude();
    final LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            longitude = location.getLongitude();
            latitude = location.getLatitude();
        }

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

        }

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

        }

        public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
            // TODO Auto-generated method stub

        }
    };

    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);
    lala = (TextView) findViewById(R.id.textView1);

    Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());   
    List<Address> myList = null;
    try {
        myList = myLocation.getFromLocation(latitude, longitude, 1);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


    lala.setText((CharSequence) myList);

回答by Olegas

lm.getLastKnownLocationcan return null, and then tou try to getLongitude()you'll get NullPointerException

lm.getLastKnownLocation可以返回null,然后getLongitude()你尝试你会得到NullPointerException

Also lala.setText((CharSequence) myList);can do the same (throw Exception) cause' myList can be null here (if Geocoderis failed).

lala.setText((CharSequence) myList);可以做同样的事情(抛出异常),因为'myList 在这里可以为空(如果Geocoder失败)。

EDITTo deal with exception in Geocoder consider the following checklist

编辑要处理地理编码器中的异常,请考虑以下清单

  1. Make sure your latitude and longitude are not null
  2. Make sure what -90 <= latitude <= 90 and -180 <= longitude <= 180
  3. Make sure you are having available network connection
  1. 确保您的纬度和经度不为空
  2. 确保 -90 <= 纬度 <= 90 和 -180 <= 经度 <= 180
  3. 确保您有可用的网络连接

EDIT2Improved code

EDIT2改进的代码

private TextView lala;

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

if(location != null) {
    showMyAddress(location);
}

final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
        showMyAddress(location);
    }

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

    }

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

    }

    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
        // TODO Auto-generated method stub

    }
};

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);
lala = (TextView) findViewById(R.id.textView1);



// Also declare a private method

private void showMyAddress(Location location) {
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());   
    List<Address> myList;
    try {
        myList = myLocation.getFromLocation(latitude, longitude, 1);
        if(myList.size() == 1) {
            lala.setText(myList.get(0).toString());             
        }
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}

回答by user2760991

Criteria criteria = new Criteria();
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
int la = (int) (location.getLatitude() * 1E6);
int lo = (int) (location.getLongitude() * 1E6);