在Android SDK更新后,LocationManager返回null

时间:2014-10-18 02:58:21

标签: android nullpointerexception google-play-services locationmanager android-5.0-lollipop

在新的Android SDK发布后,我今天刚刚遇到此错误。 每当我尝试通过LocationManager访问最后一个已知位置时,它都会创建一个NullPointerException。

在此次更新之前,这从来就不是问题,但是现在,在Android SDK更新的那一天,它经常引发我的错误。我已经更新了Android SDK和Google Play服务,但没有运气。

这些是令人讨厌的行。它们在OnCreateView中调用只包含地图的片段。它们用于建立初始位置。导致错误的行不是管理器的初始化,而是在其上调用getLastKnownLocation的行。

 LocationManager manager = (LocationManager)getActivity().getApplicationContext().getSystemService(getActivity().getApplicationContext().LOCATION_SERVICE);
 myLoc = manager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);

以及相关错误

Caused by: java.lang.NullPointerException
        at com.khakicrew.pickup.MapTab.onCreateView(MapTab.java:53)
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:915)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1099)
        at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1201)
        at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:292)

非常感谢任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:1)

将引用活动的代码移至onActivityCreated(),就像在Activity完全创建一样。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ...
    LocationManager manager = (LocationManager) getActivity().getSystemService(
            Context.LOCATION_SERVICE);
    myLoc = manager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
    ...
}