每当我试图获得震级,地图崩溃时,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
答案 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值。如果您修复日志并发布它会更好。