react-native-maps icon indicating copy to clipboard operation
react-native-maps copied to clipboard

Android Crash

Open basitmir opened this issue 5 months ago • 1 comments

Summary

As soon as map is opened the app is crashing

Reproducible sample code

import React from 'react';
import { Dimensions, StyleSheet, View } from 'react-native';
import MapView, { Marker } from 'react-native-maps';
import Geolocation from 'react-native-geolocation-service';
import { TCountryZoneCounts, TLatLng, TMarker, TTaskGroupSection, TTaskSummary, TTaskType } from '../../../types';
import { Colors } from '../../../theme';
import MapPin from './MapPin';
import Loader from '../../../components/Loader';

type Props = {
    loading: boolean;
    onRefresh: () => void;
    taskGroupSections: TTaskGroupSection[];
    zoneCounts: TCountryZoneCounts | null;
    routingEnabled: boolean;
    navigation: any;
};

const taskTypeColorMap: Partial<Record<TTaskType, string>> = {
    delivery: Colors.delivery,
    seller_delivery: Colors.delivery,
    pickup: Colors.pickup,
    exchange: Colors.exchange,
    business_pickup: Colors.pickup,
    seller_pickup: Colors.pickup,
    installation: Colors.exchange,
};

class TaskMapView extends React.Component<Props> {
    map: MapView | null = null;

    onMapLayout = (touchpoints: TMarker[]) => {
        Geolocation.getCurrentPosition((position) => {
            if (!this.map) {
                return;
            }

            const allMarkers: TLatLng[] = [];

            touchpoints.forEach((touchpoint) => {
                let coords = {
                    latitude: touchpoint.lat / Math.pow(10, 7),
                    longitude: touchpoint.lng / Math.pow(10, 7),
                };
                allMarkers.push(coords);
            });

            allMarkers.push(position.coords);

            this.map.fitToCoordinates(allMarkers, {
                edgePadding: { top: 5, right: 5, bottom: 5, left: 5 },
            });
        });
    };
    onPinPress = (task: TTaskSummary) => {
        if (task?.id_task) {
            this.props.navigation.navigate('TaskDetailsPage', {
                taskId: task.id_task,
            });
        }
    };

    render() {
        const { loading, taskGroupSections, routingEnabled } = this.props;

        if (loading) {
            return <Loader />;
        }

        const touchpoints = [] as TMarker[];

        taskGroupSections.forEach((section) =>
            section.data.forEach((group) =>
                group.tasks.forEach((task) => {
                    const colorCode = taskTypeColorMap[task.task_type] || Colors.body;

                    touchpoints.push({
                        lat: group.address.lat,
                        lng: group.address.lng,
                        label: group.address.customer_shortcode,
                        color: colorCode,
                        sequenceNumber: group.routeIdx,
                        task,
                    });
                }),
            ),
        );

        return (
            <View style={styles.mapContainer}>
                <MapView
                    ref={(mapRef) => {
                        this.map = mapRef;
                    }}
                    style={styles.map}
                    showsUserLocation
                    loadingEnabled
                    onLayout={() => this.onMapLayout(touchpoints)}
                    onMapReady={() => this.onMapLayout(touchpoints)}
                >
                    {touchpoints.map((touchpoint, i) => (
                        <Marker
                            identifier={`marker-${i}`}
                            key={`marker-${i}`}
                            coordinate={{
                                latitude: touchpoint.lat / Math.pow(10, 7),
                                longitude: touchpoint.lng / Math.pow(10, 7),
                            }}
                            onPress={() => this.onPinPress(touchpoint.task)}
                            tracksViewChanges={false}
                        >
                            <View style={styles.mapMarkerContainer}>
                                <MapPin
                                    sequenceNumber={
                                        touchpoint.sequenceNumber && touchpoint.sequenceNumber > 1000
                                            ? 0
                                            : touchpoint.sequenceNumber
                                    }
                                    label={touchpoint.label}
                                    colorCode={touchpoint.color}
                                    routingEnabled={routingEnabled}
                                />
                            </View>
                        </Marker>
                    ))}
                </MapView>
            </View>
        );
    }
}

export default TaskMapView;

const styles = StyleSheet.create({
    mapContainer: {
        ...StyleSheet.absoluteFillObject,
        height: Dimensions.get('window').height - 150,
        width: Dimensions.get('window').width,
        justifyContent: 'flex-end',
        alignItems: 'center',
        flex: 1,
    },
    map: { ...StyleSheet.absoluteFillObject },
    mapMarkerContainer: { flexDirection: 'row', padding: 10 },
});

Steps to reproduce

  • Just open the maps and it crashes after 1-2 seconds

Expected result

It should not crash

Actual result

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.removeView(android.view.View)' on a null object reference at com.rnmaps.maps.MapView.removeMapLoadingLayoutView(MapView.java:1634) at com.rnmaps.maps.MapView.cacheView(MapView.java:1658) at com.rnmaps.maps.MapView.lambda$onMapReady$4(MapView.java:627) at com.rnmaps.maps.MapView.$r8$lambda$vG94qJz0GKHlCTHHTDItKAY07QA(Unknown Source:0) at com.rnmaps.maps.MapView$$ExternalSyntheticLambda26.onMapLoaded(D8$$SyntheticClass:0) at com.google.android.gms.maps.zzj.zzb(com.google.android.gms:play-services-maps@@19.1.0:1) at com.google.android.gms.maps.internal.zzao.zza(com.google.android.gms:play-services-maps@@19.1.0:1) at com.google.android.gms.internal.maps.zzb.onTransact(com.google.android.gms:play-services-maps@@19.1.0:3) at android.os.Binder.transact(Binder.java:1067) at m.axl.c(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:8) at com.google.android.gms.maps.internal.am.e(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:6) at com.google.maps.api.android.lib6.impl.dx.run(:com.google.android.gms.policy_maps_core_dynamite@[email protected]:69) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8319) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)

React Native Maps Version

1.24.3

What platforms are you seeing the problem on?

Android

React Native Version

0.77.0

What version of Expo are you using?

Not using Expo

Device(s)

Redmi Note 10 Pro

Additional information

No response

basitmir avatar Jun 10 '25 09:06 basitmir

In my case, removing loadingEnabled prop helped and fixed the crash.

kosmydel avatar Jun 10 '25 09:06 kosmydel

I have this error too, can anyone help me fix it?

CongCaoDEV avatar Jun 26 '25 09:06 CongCaoDEV

I have this error too, can anyone help me fix it?

so you have two option to fix one is to remove loadingEnabled in the latest version or just downgrade to 1.24.0

basitmir avatar Jun 26 '25 12:06 basitmir

@basitmir can you please try with https://github.com/react-native-maps/react-native-maps/pull/5666 to see if it's fixed

salah-ghanim avatar Aug 04 '25 16:08 salah-ghanim

setting loadingEnabled={false}

Fixed it for me, too

Yusuf-R avatar Aug 13 '25 02:08 Yusuf-R

Same with me, below is error from Logcat java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bp.z(android.os.Bundle)' on a null object reference at com.google.maps.api.android.lib6.impl.ct.k(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (260800-0):3) at com.google.android.gms.maps.internal.p.be(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (260800-0):109) at m6.do.onTransact(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (260800-0):21) at android.os.Binder.transact(Binder.java:1273) at com.google.android.gms.internal.maps.zza.zzJ(com.google.android.gms:play-services-maps@@19.1.0:2) at com.google.android.gms.maps.internal.zzl.onSaveInstanceState(com.google.android.gms:play-services-maps@@19.1.0:3) at com.google.android.gms.maps.zzah.onSaveInstanceState(com.google.android.gms:play-services-maps@@19.1.0:3) at com.google.android.gms.dynamic.DeferredLifecycleHelper.onSaveInstanceState(com.google.android.gms:play-services-base@@18.4.0:1) at com.google.android.gms.maps.MapView.onSaveInstanceState(com.google.android.gms:play-services-maps@@19.1.0:1) at com.rnmaps.maps.MapView.onDetachedFromWindow(MapView.java:341) at android.view.View.dispatchDetachedFromWindow(View.java:23167) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3993) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3985) at android.view.ViewGroup.endViewTransition(ViewGroup.java:7242) at com.swmansion.rnscreens.ScreenStack.endViewTransition(ScreenStack.kt:75) at androidx.fragment.app.DefaultSpecialEffectsController$AnimationEffect$onCommit$1.onAnimationEnd$lambda$0(DefaultSpecialEffectsController.kt:553) at androidx.fragment.app.DefaultSpecialEffectsController$AnimationEffect$onCommit$1.$r8$lambda$6fa8Ib9U-odOeQPVWaNv8aZmow0(Unknown Source:0) at androidx.fragment.app.DefaultSpecialEffectsController$AnimationEffect$onCommit$1$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:995) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loopOnce(Looper.java:248) at android.os.Looper.loop(Looper.java:338) at android.app.ActivityThread.main(ActivityThread.java:9067) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)

zeroxw avatar Sep 19 '25 09:09 zeroxw

Same with me, below is error from Logcat java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bp.z(android.os.Bundle)' on a null object reference at com.google.maps.api.android.lib6.impl.ct.k(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (260800-0):3) at com.google.android.gms.maps.internal.p.be(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (260800-0):109) at m6.do.onTransact(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (260800-0):21) at android.os.Binder.transact(Binder.java:1273) at com.google.android.gms.internal.maps.zza.zzJ(com.google.android.gms:play-services-maps@@19.1.0:2) at com.google.android.gms.maps.internal.zzl.onSaveInstanceState(com.google.android.gms:play-services-maps@@19.1.0:3) at com.google.android.gms.maps.zzah.onSaveInstanceState(com.google.android.gms:play-services-maps@@19.1.0:3) at com.google.android.gms.dynamic.DeferredLifecycleHelper.onSaveInstanceState(com.google.android.gms:play-services-base@@18.4.0:1) at com.google.android.gms.maps.MapView.onSaveInstanceState(com.google.android.gms:play-services-maps@@19.1.0:1) at com.rnmaps.maps.MapView.onDetachedFromWindow(MapView.java:341) at android.view.View.dispatchDetachedFromWindow(View.java:23167) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3993) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.clearDisappearingChildren(ViewGroup.java:7131) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3987) at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3985) at android.view.ViewGroup.endViewTransition(ViewGroup.java:7242) at com.swmansion.rnscreens.ScreenStack.endViewTransition(ScreenStack.kt:75) at androidx.fragment.app.DefaultSpecialEffectsController$AnimationEffect$onCommit$1.onAnimationEnd$lambda$0(DefaultSpecialEffectsController.kt:553) at androidx.fragment.app.DefaultSpecialEffectsController$AnimationEffect$onCommit$1.$r8$lambda$6fa8Ib9U-odOeQPVWaNv8aZmow0(Unknown Source:0) at androidx.fragment.app.DefaultSpecialEffectsController$AnimationEffect$onCommit$1$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:995) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loopOnce(Looper.java:248) at android.os.Looper.loop(Looper.java:338) at android.app.ActivityThread.main(ActivityThread.java:9067) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)

I am also facing this problem it is reported by play console crashed and ANRs

Image

nazacity avatar Sep 22 '25 14:09 nazacity

closing as duplicate of: https://github.com/react-native-maps/react-native-maps/issues/5722

please try this fix first: https://github.com/react-native-maps/react-native-maps/pull/5751

if it's not working for you provide a full reproducible repo in that ticket so that it gets solved

btw those are two different exceptions and the save bundle null in theory is solved already.

salah-ghanim avatar Sep 29 '25 17:09 salah-ghanim