Google地图获取当前位置

时间:2014-12-04 03:21:30

标签: android google-maps latitude-longitude

每当我试图获得震级,地图崩溃时,logcat中什么也没有。

很抱歉问基本的,但我是Android新手。

提前致谢!

我的代码:

 private void setupMap() {
            // TODO Auto-generated method stub
        googlemap.setMyLocationEnabled(true);

            //get the loacation manger object form system service
            LocationManager locationManager=(LocationManager)getSystemService(LOCATION_SERVICE);

            //get the criteria object for provider
            Criteria criteria= new Criteria();

            //get the name of best provider
            String provider=locationManager.getBestProvider(criteria,true);

            //get current Location
            Location currentLocation=locationManager.getLastKnownLocation(provider);

            //set maptype
            googlemap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

             //Get lattitude and longitude
            //double latitude=currentLocation.getLatitude();
            //double longitude=currentLocation.getLongitude();

            //Toast.makeText(getBaseContext(),String.valueOf( latitude), Toast.LENGTH_SHORT).show();    //enable my location layer of google map

   } 

日志猫:

12-04 12:16:11.652: E/AndroidRuntime(8811): FATAL EXCEPTION: main
12-04 12:16:11.652: E/AndroidRuntime(8811): Process: com.example.test, PID: 8811
12-04 12:16:11.652: E/AndroidRuntime(8811): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.map}: java.lang.NullPointerException
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.app.ActivityThread.access$800(ActivityThread.java:163)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.os.Handler.dispatchMessage(Handler.java:102)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.os.Looper.loop(Looper.java:157)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.app.ActivityThread.main(ActivityThread.java:5335)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at java.lang.reflect.Method.invokeNative(Native Method)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at java.lang.reflect.Method.invoke(Method.java:515)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at dalvik.system.NativeStart.main(Native Method)
12-04 12:16:11.652: E/AndroidRuntime(8811): Caused by: java.lang.NullPointerException
12-04 12:16:11.652: E/AndroidRuntime(8811):     at com.example.test.map.setupMap(map.java:63)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at com.example.test.map.onCreate(map.java:36)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.app.Activity.performCreate(Activity.java:5389)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
12-04 12:16:11.652: E/AndroidRuntime(8811):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)
12-04 12:16:11.652: E/AndroidRuntime(8811):     ... 11 more

3 个答案:

答案 0 :(得分:0)

你确定吗

Location currentLocation=locationManager.getLastKnownLocation(provider);

不是空的吗?

您应该实现locationChangeListener并使用该位置

googlemap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {

@Override
public void onMyLocationChange(Location location) {
//Get lattitude and longitude
double latitude=location.getLatitude();
double longitude=location.getLongitude();

答案 1 :(得分:0)

getLastKnownLocation()有可能返回null,这可能会导致您的应用与NullPointerException崩溃。

或者,您可以浏览Android提供的Location Strategies文档并使用其中提供的方法:

// Acquire a reference to the system Location Manager 
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates 
LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        // Display a marker on the GoogleMap
    } 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 
    public void onProviderEnabled(String provider) {} 
    public void onProviderDisabled(String provider) {} 
  }; 
// Register the listener with the Location Manager to receive location updates
// NOTE : PLEASE ADJUST THE FREQUENCY OF UPDATES PROPERLY
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);  

如果您只想对用户的位置进行一次更新,也可以使用requestSingleUpdate()

答案 2 :(得分:0)

您的手机中是否有打开位置或gps getLastKnownLocation()也很有可能返回null值。如果您修复日志并发布它会更好。