谷歌地图V2安卓应用程序中的空数组错误

4

我正在尝试在一个片段中集成谷歌地图...应用程序之前一直运行良好,但突然崩溃了。

我查看了以下链接...但这些都对我没有用: 尝试获取Google Maps V2 Android应用程序中空数组的长度

为什么谷歌地图V2突然崩溃,提示java.lang.NullPointerException: Attempt to get length of null array?

我的代码如下:

@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        MapsInitializer.initialize(getActivity());



        View bottomSheet = fragmentLayout.findViewById(R.id.bottomSheet);

        fap = (FloatingActionButton) fragmentLayout.findViewById(R.id.fap);
        fap.setOnClickListener(this);
        bottomSheetTitle = (TextView) fragmentLayout.findViewById(R.id.bottomSheetTitle);
        bottomSheetAddress = (TextView) fragmentLayout.findViewById(R.id.bottomSheetAddress);

        bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);


        bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(@NonNull View bottomSheet, int newState) {
                if (newState == BottomSheetBehavior.STATE_HIDDEN) {
                    fap.setVisibility(View.GONE);
//                    text1.setText("Collapse Me!");
                } else {
                    fap.setVisibility(View.VISIBLE);
//                    text1.setText("Expand Me!");
                }
            }

            @Override
            public void onSlide(@NonNull View bottomSheet, float slideOffset) {

            }


        });
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
//        getDetails(1);
//        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);


        switch (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity())) {
            case ConnectionResult.SUCCESS:
                Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT).show();
                mapView = (MapView) fragmentLayout.findViewById(R.id.map);
                if(mapView != null)
                    mapView.onCreate(savedInstanceState);
                // Gets to GoogleMap from the MapView and does initialization stuff
                if (mapView != null) {
                    Toast.makeText(getActivity(), "Getting map", Toast.LENGTH_SHORT).show();
                    mapView.getMapAsync(this);
                }
                break;
            case ConnectionResult.SERVICE_MISSING:
                Toast.makeText(getActivity(), "SERVICE MISSING", Toast.LENGTH_SHORT).show();
                break;
            case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:
                Toast.makeText(getActivity(), "UPDATE REQUIRED", Toast.LENGTH_SHORT).show();
                break;
            default:
//                Toast.makeText(getActivity(), GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()), Toast.LENGTH_SHORT).show();
                break;
        }

//        googleMap.setMyLocationEnabled(true);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
//        Toast.makeText(getActivity(), "Map is ready to use", Toast.LENGTH_SHORT).show();
        this.map = googleMap;
        map.getUiSettings().setMyLocationButtonEnabled(false);
        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            Toast.makeText(getActivity(), "Oops permission denied", Toast.LENGTH_SHORT).show();
            return;
        }
        map.setMyLocationEnabled(true);
        map.getUiSettings().setMyLocationButtonEnabled(true);
        mClusterManager = new ClusterManager<Location>(getActivity(), map);

        map.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
            @Override
            public void onCameraIdle() {
//                Toast.makeText(getActivity(), "camera moved", Toast.LENGTH_SHORT).show();
                getLocationByRadius(map.getCameraPosition().target.latitude, map.getCameraPosition().target.longitude);
            }
        });

        map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition cameraPosition) {
                getLocationByRadius(map.getCameraPosition().target.latitude, map.getCameraPosition().target.longitude);
            }
        });

        map.setOnCameraIdleListener(mClusterManager);
        map.setOnMarkerClickListener(mClusterManager);

        mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<Location>() {
            @Override
            public boolean onClusterItemClick(Location location) {
                getDetails(location.getLocationId());
                return false;
            }

        });


        checkPermission();


    }

XML布局:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="rollwithme.com.rollwithme.Fragments.ParkingFragment" app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <com.google.android.gms.maps.MapView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map" />

    <include layout="@layout/fragment_location_details" />

    <android.support.design.widget.FloatingActionButton
        android:src="@drawable/ic_expand_less_white_24dp"
        android:id="@+id/fap"
        app:fabSize="normal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_anchor="@id/bottomSheet"
        android:visibility="gone"
        app:backgroundTint="@color/colorPrimary"
        app:layout_anchorGravity="top|right|end"
        android:layout_marginRight="@dimen/cardViewPadding"/>

</android.support.design.widget.CoordinatorLayout>

我正在LG G3上进行测试......应用在华为Y6 Pro上运行良好......以前也可以在G3上运行.....

我收到的错误消息是:

FATAL EXCEPTION: main
                                                                         Process: rollwithme.com.rollwithme, PID: 4401
                                                                         java.lang.NullPointerException: Attempt to get length of null array
                                                                             at maps.G.a.a(Unknown Source)
                                                                             at maps.V.N.a(Unknown Source)
                                                                             at maps.D.e.a(Unknown Source)
                                                                             at maps.D.p.a(Unknown Source)
                                                                             at maps.ad.ae.a(Unknown Source)
                                                                             at maps.ad.t.a(Unknown Source)
                                                                             at maps.ad.R.a(Unknown Source)
                                                                             at uo.onTransact(:com.google.android.gms.DynamiteModulesB:66)
                                                                             at android.os.Binder.transact(Binder.java:380)
                                                                             at com.google.android.gms.maps.internal.IMapViewDelegate$zza$zza.onCreate(Unknown Source)
                                                                             at com.google.android.gms.maps.MapView$zza.onCreate(Unknown Source)
                                                                             at com.google.android.gms.dynamic.zza$3.zzb(Unknown Source)
                                                                             at com.google.android.gms.dynamic.zza$1.zza(Unknown Source)
                                                                             at com.google.android.gms.maps.MapView$zzb.zzbru(Unknown Source)
                                                                             at com.google.android.gms.maps.MapView$zzb.zza(Unknown Source)
                                                                             at com.google.android.gms.dynamic.zza.zza(Unknown Source)
                                                                             at com.google.android.gms.dynamic.zza.onCreate(Unknown Source)
                                                                             at com.google.android.gms.maps.MapView.onCreate(Unknown Source)
                                                                             at rollwithme.com.rollwithme.Fragments.ParkingFragment.onActivityCreated(ParkingFragment.java:163)
                                                                             at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2089)
                                                                             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1133)
                                                                             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
                                                                             at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
                                                                             at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1638)
                                                                             at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679)
                                                                             at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
                                                                             at android.support.v4.view.ViewPager.populate(ViewPager.java:1240)
                                                                             at android.support.v4.view.ViewPager.populate(ViewPager.java:1088)
                                                                             at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614)
                                                                             at android.view.View.measure(View.java:17496)
                                                                             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
                                                                             at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1438)
                                                                             at android.widget.LinearLayout.measureVertical(LinearLayout.java:724)
                                                                             at android.widget.LinearLayout.onMeasure(LinearLayout.java:615)
                                                                             at android.view.View.measure(View.java:17496)
                                                                             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
                                                                             at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:700)
                                                                             at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:767)
                                                                             at android.view.View.measure(View.java:17496)
                                                                             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
                                                                             at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
                                                                             at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
                                                                             at android.view.View.measure(View.java:17496)
                                                                             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
                                                                             at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1438)
                                                                             at android.widget.LinearLayout.measureVertical(LinearLayout.java:724)
                                                                             at android.widget.LinearLayout.onMeasure(LinearLayout.java:615)
                                                                             at android.view.View.measure(View.java:17496)
                                                                             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
                                                                             at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
                                                                             at android.view.View.measure(View.java:17496)
                                                                             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
                                                                             at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1438)
                                                                             at android.widget.LinearLayout.measureVertical(LinearLayout.java:724)
                                                                             at android.widget.LinearLayout.onMeasure(LinearLayout.java:615)
                                                                             at android.view.View.measure(View.java:17496)
                                                                             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
                                                                             at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
                                                                             at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2636)
                                                                            at android.view.View.measure(View.java:17496

我也遇到了这个问题。这一定是由于新的地图库引起的。 - f.khantsis
@RichardLeMesurier 谢谢你提供的链接...但我已经检查过了...它们都对我没用...不过我通过转移到supportMapFragment解决了这个问题。 - coder
你可能已经不再担心这个问题了,但是你是否尝试在视图的每个生命周期方法中调用mapView.on~()?这就是对我有效的方法。 - Juan José Melero Gómez
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接