使用Map Fragment时始终返回NPE

时间:2014-09-03 18:58:53

标签: android google-maps parse-platform geocoding mapfragment

我使用以下代码尝试在将字符串地址转换为LatLng后将标记添加到某个位置。但该应用程序总是崩溃与NPE错误。我尝试了调试,并在注释显示的行显示错误。我确认其中没有使用的变量为null。任何人都知道我做错了什么?

public LatLng getLocationFromAddress(String strAddress) {
            Geocoder coder = new Geocoder(this);
            List<Address> address;
            LatLng p1 = null;
            try {
            address = coder.getFromLocationName(strAddress, 5);
            if (address != null && address.size() > 0) {
                Address location = address.get(0);
                p1 = new LatLng(location.getLatitude(), location.getLongitude());
            } else {
                p1 = new LatLng(19.111258, 72.908313);
            }
            } catch (IOException e) {
                e.printStackTrace();
                return p1;
            }
            return p1;
        }

        public void prepareMap() {
            final LatLng REST = getLocationFromAddress(restAddress + ","
                    + restLocation);
            int zoomNiveau = 15;
            map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            map.addMarker(new MarkerOptions().position(REST).title(restName));//error points here
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(REST, zoomNiveau));
    }

1 个答案:

答案 0 :(得分:0)

该行上有一些可能导致NPE的事情 - 我会将其分开一些,以便您可以缩小问题范围。

map.addMarker(new MarkerOptions().position(REST).title(restName));

可以改为......

MarkerOptions options = new MarkerOptions();
options.position(REST);
options.title(restName);
map.addMarker(options);

REST变量对我来说很好,所以我的赌注是'map'或'restName'。

请注意以下MapFragment上的Android文档:

If a GoogleMap is not available, getMap() will return null.