2014-12-04 3 views
-1

Всякий раз, когда я пытаюсь получить решетку, карта падает, в логарифме нет ничего.Карты Google получают текущее местоположение

Извините за вопрос, но я новичок в 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

getLastKnownLocation() имеет возможность возвращения null, который может вызвать ваше приложение к сбою с NullPointerException.

В качестве альтернативы, вы можете перейти в Location Strategies документы, предоставляемые Android и использовать метод при условии:

// 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(), если вы просто хотите одно обновление в положение пользователя.

+0

У меня есть еще один запрос, хотя ... Всякий раз, когда я пытаюсь Toast в методе onLocationChanged ... оно продолжается, даже если приложение закрыто ... !!! – ABC

+0

Вы запрашиваете обновление ''. Как говорят документы, вам нужно остановить обновления через некоторое время. –

+1

Спасибо @ маленькому ребенку .. Очень ценю вашу помощь – ABC

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(); 
+0

Спасибо за ответ ... ИТ, очевидно, возвратил null ... Я использовал фрагмент кода, но appargly ForceClosing приложения. – ABC

0

У вас есть включенные местоположения или gps на вашем мобильном телефоне? Также getLastKnownLocation() имеют высокую возможность возврата нулевого значения. Было бы лучше, если вы исправите свой журнал и опубликуете его тоже.

Смежные вопросы