2015-03-04 5 views
0

Я пытаюсь получить широту и долготу показать свое текущее местоположение на карте Google, но я получаю эту ошибку:Невозможно начать деятельность ComponentInfo - LocationManager

03-04 18:00:50.785 13625-13625/com.example.thulio.googlemapstest W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40e0c960) 
03-04 18:00:50.785 13625-13625/com.example.thulio.googlemapstest E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.thulio.googlemapstest/com.example.thulio.googlemapstest.MapPane}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309) 
      at android.app.ActivityThread.access$700(ActivityThread.java:157) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:176) 
      at android.app.ActivityThread.main(ActivityThread.java:5317) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.example.thulio.googlemapstest.MapPane.getCurrentLocation(MapPane.java:35) 
      at com.example.thulio.googlemapstest.MapPane.onCreate(MapPane.java:28) 
      at android.app.Activity.performCreate(Activity.java:5326) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309) 
            at android.app.ActivityThread.access$700(ActivityThread.java:157) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:176) 
            at android.app.ActivityThread.main(ActivityThread.java:5317) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
            at dalvik.system.NativeStart.main(Native Method) 

Я просто пытаюсь чтобы получить текущее местоположение один раз и отобразить на карте.

MainActivity:

public class MapPane extends Activity{ 
    private GoogleMap map; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_map_pane); 

     map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

     getCurrentLocation(); 
    } 


    public void getCurrentLocation(){ 
     LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     double longitude = location.getLongitude(); 
     double latitude = location.getLatitude(); 

     LatLng USER_LOCATION = new LatLng(longitude, latitude); 

     map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     CameraUpdate update = CameraUpdateFactory.newLatLngZoom(USER_LOCATION, 13); 
     map.animateCamera(update); 

     map.addMarker(new MarkerOptions().position(USER_LOCATION).title("USER LOCATION")); 
    } 
} 

В AndroidManifest:

... 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
... 

Спасибо за помощь.

+0

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

+0

@JaySnayder Я думаю, проблема в getLastKnowLocation(), но я не знаю, как это исправить. –

ответ

1

Вы ссылались на следующий фрагмент в файле AndroidManifest.xml?

<application ...> 
    ... 
    <uses-library android:name="com.google.android.maps" /> 
</application> 

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

Другое example кто-то настраивает менеджера и делает попытку в блоке catch try. Хотя не стесняйтесь делать это, когда вы когда-либо хотите. Но нет гарантии, что он будет готов сразу. Другие проверки должны быть выполнены.

+0

Да, приложение работает с постоянной долготой и широтой, но когда я пытаюсь получить свое текущее местоположение, я получаю эту ошибку. –

+0

Спасибо за пример. Оно работает. –

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