所以:
我已经将React Native项目做成了Expo。它具有几种视图,airbnb mapView之类的东西。它以前是纯React本机项目(在create-react-native-app甚至还没做的时候就完成了),我最近将其移到了expo。几乎一切正常。转换为expo对于iOS来说是完美的,并且一切都可以正常运行。但是当我尝试在Android手机上启动应用程序时,我得到了一个很奇怪的错误。
尝试在空对象引用上调用接口方法'boolean abi20_0_0.com.facebook.react.bridge.ReadableMap.hasKey(java.lang.String)'
我认为这与查找位置的实际过程有关,而不是与实际的mapView有关,但是我唯一更改的是:import MapView from 'react-native-maps';
至import { MapView } from 'expo';
这是用于查找位置的实际代码:
componentDidMount() {
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({
region: {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
},
lat : position.coords.latitude,
lon : position.coords.longitude,
cords : {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
}
});
},
(error) => alert(error.message),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
this.watchID = navigator.geolocation.watchPosition(
(position) => {
this.setState({
cords : {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
},
lat : position.coords.latitude,
lon : position.coords.longitude,
});
});
}
它仍然可以在没有expo的旧android版本上正常工作,并且可以在由expo制作的新iOS版本上正常工作。
package.json依赖
"dependencies": {
"expo": "^20.0.0",
"firebase": "^4.3.0",
"react": "16.0.0-alpha.12",
"react-native": "https://github.com/expo/react-native/archive/sdk-20.0.0.tar.gz",
"react-navigation": "^1.0.0-beta.11"
}
我针对这个完全相同的问题提出了另一个问题:
watchPosition fails with react native expo
他得出了和我相同的结论,但是关于他的问题的信息很少,也没有答案/评论,所以我决定提出自己的问题。
最佳答案
将空选项对象作为第三个参数传递给Android上的watchPosition
。
https://github.com/facebook/react-native/issues/14580