NullPointerException有时候

时间:2013-01-06 17:42:22

标签: android nullpointerexception try-catch

我的应用程序中有一个功能,当用户点击按钮时,它会显示最近的办公室。功能在瑞典的一部分工作,但在瑞典北部不起作用。我使用try-catch语句,我将捕获空指针异常。当我关闭我的网络和位置时,我收到错误消息,但在瑞典北部,没有消息,应用程序只是崩溃。我的代码在那里。 onFindOfficeClick()是一个独立的功能。我怎么解决这个问题?我试过调试但没有遇到错误...不知道该怎么做。我从xml文件中获取所有坐标。 anybaody有什么建议吗?

private void onFindOfficeClick() {
    try {
        LocationManager lm = (LocationManager)getSystemService(Service.LOCATION_SERVICE);
        List<String> providersName = lm.getProviders(false);
        if(providersName.size()>0){
            Location location = lm.getLastKnownLocation(providersName.get(0));
            float results [] = new float [1];
            final double longitude = location.getLongitude();
            final double latitude = location.getLatitude();
            final int officeCount = mOfficesInfo.length;
            double minDistance = 0;
            int officeNum = 0;
            for(int i=0; i<officeCount; i++){
                Location.distanceBetween(latitude, longitude,
                        mOfficesInfo[i].getLatitude(), mOfficesInfo[i].getLongitude(), results);
                if(i==0){
                    minDistance = results[0];
                } else if(results[0]<minDistance){
                    minDistance=results[0];
                    officeNum = i;
                }
            }
            int countryPosition = mCountries.indexOf(mOfficesInfo[officeNum].getCountry());
            mCountrySpiner.setSelection(countryPosition);
            mFindedOfficeName = mOfficesInfo[officeNum].getOfficeName();
            mOfficesSpiner.setSelection(officeNum);
        }
    }
    catch (NullPointerException e)
    {
        Toast.makeText(getApplicationContext(),"check your network and GP:s connections",Toast.LENGTH_SHORT).show();
    }
}

1 个答案:

答案 0 :(得分:0)

在调用

之前进行空检查
LocationManager lm = (LocationManager)getSystemService(Service.LOCATION_SERVICE);

if(lm!=null){
   lm.getProviders(false);.
 }

也可能是

        Location location = lm.getLastKnownLocation(providersName.get(0));

在位置变量中给出null,所以只需修改代码并在从位置获取纬度和长度之前进行空值检查。

 if(location!=null){

      final double longitude = location.getLongitude();
      final double latitude = location.getLatitude();
 }

因为在你的代码中捕获NullPointerException是不好的做法。