react-native-maps
react-native-maps copied to clipboard
Android Crash
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
In my case, removing loadingEnabled prop helped and fixed the crash.
I have this error too, can anyone help me fix it?
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 can you please try with https://github.com/react-native-maps/react-native-maps/pull/5666 to see if it's fixed
setting
loadingEnabled={false}
Fixed it for me, too
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)
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
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.