如何在Android中获得lat和long

时间:2013-07-31 08:41:26

标签: android location

我在代码中遇到了一个小问题,并因此而陷入困境。以下是我的代码: -

public class MainActivity extends Activity {
TextView textView1;
Location currentLocation;
double currentLatitude,currentLongitude;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView1 = (TextView) findViewById(R.id.textView1);

    findLocation();

    textView1.setText(String.valueOf(currentLatitude) + "\n"
            + String.valueOf(currentLongitude));

}

 public void findLocation() {

        LocationManager locationManager = (LocationManager) this
                .getSystemService(Context.LOCATION_SERVICE);

        LocationListener locationListener = new LocationListener() {

            public void onLocationChanged(Location location) {

                updateLocation(location,currentLatitude,currentLongitude);

                Toast.makeText(
                        MainActivity.this,
                        String.valueOf(currentLatitude) + "\n"
                                + String.valueOf(currentLongitude), 5000)
                        .show();

                }

            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
            }

            public void onProviderEnabled(String provider) {
            }

            public void onProviderDisabled(String provider) {
            }
        };

        locationManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

    }


    void updateLocation(Location location,double currentLatitude,double currentLongitude) {
            currentLocation = location;
            this.currentLatitude = currentLocation.getLatitude();
            this.currentLongitude = currentLocation.getLongitude();

        }
}

每个东西都运行正常。但我的问题是类级变量currentLatitude和currentLongitude的值为null。在上面的代码中,当我在更新位置方法的文本视图中设置lat和long时,它工作正常但是当我想在创建方法的文本视图中设置相同的值时,它会给出null值。为什么我不知道。请帮助理清这个问题。谢谢提前!

3 个答案:

答案 0 :(得分:1)

它因为在Oncreate方法lat中设置textview中的文本并且long未初始化。它会在更新时初始化。

所以你应该在updatelocation()方法中设置文本。

locationlistener需要一段时间来更新它的lat和long,以便同时执行你的oncreate方法,这样你的lat和long就不会更新并保持为null。所以最好在updatelocation上设置文本。

希望它能帮助!!

答案 1 :(得分:0)

我建议你将textView1.setText(String.valueOf(currentLatitude) + "\n" + String.valueOf(currentLongitude));放在updateLocation函数中。

答案 2 :(得分:0)

在返回值之前查找位置需要一些时间。它异步发生,同时你的UI线程继续。

所以在onCreate(),你还没有位置。 onCreate()中的呼叫顺序无关紧要。

在调用updateLocation()方法时获取位置,并且无法保证何时会对您的视图进行设置。

因此,要修复,请在那里更新textView文本。

void updateLocation(Location location,double currentLatitude,double currentLongitude) {
    currentLocation = location;
    this.currentLatitude = currentLocation.getLatitude();
    this.currentLongitude = currentLocation.getLongitude();
    textView1.setText(String.valueOf(currentLatitude) + "\n"
        + String.valueOf(currentLongitude));
}