googleMap上addmarker和markersoptions上的空指针异常

时间:2016-11-17 10:06:21

标签: java android google-maps google-maps-markers google-maps-android-api-2

当我尝试在我们的应用上加载谷歌地图时,我得到nullpointerException,如下所示。所以java类从<Container>延伸到AppCompatActivty内部我们尝试intialiseMap()

getMap()

这是我们在placeMarker方法

中获得异常的地方
D/Profileactivity: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' on a null object reference

这是我们初始化Map

的方式
public void placeMarker(LatLongDetails user_latlongobj2,
                        final Context contextPlace) {
    try {
        if (googlemap == null) {
            intialiseMap();
            animatecamera(user_latlongobj);
        }
        if (LoginDetails.Address.length() < 1) {
            LoginDetails.Address = "Getting your location .....";
        }
        //googlemap.clear();
        marker = new MarkerOptions().position(
                new LatLng(user_latlongobj2.user_latitude,
                        user_latlongobj2.user_longitude)).title(
                LoginDetails.Address);

        System.out.println("This is the Address" + LoginDetails.Address);

        marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));

        if (googlemap != null) {

            googlemap.addMarker(marker).showInfoWindow();
        }else {
            intialiseMap();
            googlemap.addMarker(marker).showInfoWindow();
        }
        System.out.println("PLACING MARKER" + LoginDetails.Address);
        if (marker == null || contextPlace == null) {
            Intent in =new Intent(this,ProfileActivity1.class);
            in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(in);
        }
        else
            fixmarker(marker, contextPlace);

    } catch (Exception e) {
        fixmarker(marker, contextPlace);
        Log.d("Profileactivity", "" + e);
    }

}

1 个答案:

答案 0 :(得分:1)

根据要求回答总结解决方案及找到它的过程:

1)NullPointerException和相应的消息表明问题出在该块的else-branch中:

    if (googlemap != null) {
        googlemap.addMarker(marker).showInfoWindow();
    }else {
        intialiseMap();
        googlemap.addMarker(marker).showInfoWindow();
    }

此处,intialiseMap();似乎无法初始化地图。

2)在intialiseMap()中有一个try-catch-block,如果为null,则应该初始化googlemap。但是,catch - 块为空,因此尝试初始化时的任何异常都会丢失。

请注意未来的读者:如果你遇到异常,你应该始终始终以某种方式处理它。至少做某事的一种简单方法是记录它。

当然,在某些情况下,您只是想忽略特定的异常,但在这种情况下,您应该真正了解后果(抛出异常时会发生什么,为什么会抛出等等)并且你总是记录你有意忽略那个例外,例如在您的代码中添加简短评论。

3)在记录捕获的异常后,OP意识到googlemap的初始化失败,因此能够进一步跟踪问题。

然后他搜索了答案和解决方案,并提出了以下两个线程,帮助他解决了问题: