【问题标题】:NullPointerException on getting current location value (lat, lng) Google Maps获取当前位置值 (lat, lng) Google Maps 时出现 NullPointerException
【发布时间】:2015-08-29 12:56:52
【问题描述】:

当我使用地图片段时,我获取当前位置的代码正在工作,但是当我在另一个类中使用它而不显示地图时,我在字符串提供程序中得到 nullpointerException。您能否检查一下我的程序出了什么问题,如果可能的话,请解释一下为什么会出现此错误。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View v = inflater
            .inflate(R.layout.layout_school_list, container, false);
    lvList = (ListView) v.findViewById(R.id.lvSchools);
    LocationManager locationManager = (LocationManager) getSystemService("location");
    Criteria criteria = new Criteria();
    String provider = locationManager.getBestProvider(criteria, true);
    final Location currentLoc = locationManager
            .getLastKnownLocation(provider);
    if (currentLoc != null) {
        onLocationChanged(currentLoc);
    }

    if (Distance==true){
        double lat = currentLoc.getLatitude();
        double lng = currentLoc.getLongitude();
        ArrayList<Double> rangeList = getRangeList(lat, lng);
        ArrayList<String> theList1 = new ArrayList<String>();
        for (int count = 0; count < rangeList.size(); count++)
        {
            String temp = sTuition[count];
            theTuitionFee = Integer.parseInt(temp);
            for(int subloop=0; subloop<sSpecialty[count].length; subloop++) {
            List<String> values = (List<String>)thisFilter[4];
            if (rangeList.get(count) <= DistanceVal
                    &&sReg[count].equalsIgnoreCase((String)thisFilter[0])
                    && sAdmin[count].equalsIgnoreCase((String)thisFilter[1])
                    && sAmbience[count].equalsIgnoreCase((String)thisFilter[3])
                    && amountTF >= theTuitionFee
                    && filtered(sSpecialty[count][subloop], values)) {
                theList1.add(sList[count]);

            }
            }
        }

        displayNearbyList(theList1);
    }

这是我的方法:

public void onLocationChanged(Location location) {
    double currentLat = location.getLatitude();
    double currentLng = location.getLongitude();

}

getSystemService 也出现错误,我的 IDE 要求我输入这个

 private LocationManager getSystemService(String string) {
    // TODO Auto-generated method stub
    return null;
}

在我的其他工人阶级中没有使用。

这是我的堆栈跟踪。我是新来的,所以我不知道如何正确发布堆栈跟踪

08-29 12:14:45.017: E/AndroidRuntime(6864): 致命异常: main 08-29 12:14:45.017: E/AndroidRuntime(6864): java.lang.NullPointerException 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 capstone.app.recommender.SchoolListFragmentFilter.onCreateView(SchoolListFragmentFilter.java:67) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.os.Handler.handleCallback(Handler.java:725) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.os.Handler.dispatchMessage(Handler.java:92) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.os.Looper.loop(Looper.java:137) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 android.app.ActivityThread.main(ActivityThread.java:5041) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 java.lang.reflect.Method.invokeNative(Native Method) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 java.lang.reflect.Method.invoke(Method.java:511) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 08-29 12:14:45.017: E/AndroidRuntime(6864): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 08-29 12:14:45.017: E/AndroidRuntime(6864): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 请提供您的堆栈跟踪
  • 您遇到的错误是什么,请发布日志。将代码发布在不起作用的地方。
  • 我已经提到过,这就是我得到错误的地方。 String provider = locationManager.getBestProvider(criteria, true);我是新来的,所以我不知道如何添加堆栈跟踪抱歉。等我试试

标签: java android google-maps nullpointerexception


【解决方案1】:

你应该换行

LocationManager locationManager = (LocationManager) getSystemService("location");

有了这个

LocationManager locationManager = (LocationManager)<your context>.getSystemService(Context.LOCATION_SERVICE);

【讨论】:

  • 我明白了,现在我明白了,getSystemService 不支持非活动类,所以我需要传递我的上下文
【解决方案2】:
 private LocationManager getSystemService(String string) {
    // TODO Auto-generated method stub
    return null;
}

这是您必须自己实现的方法,因为您返回 null。下面的 locationManagernull,因此会抛出 NullPointerException

String provider = locationManager.getBestProvider(criteria, true);

查看下面的帖子,了解您应该如何实现getSystemService()

How does getSystemService() work exactly?

【讨论】: