地理定位器/地理编码错误
我正在通过地理定位器软件包收集GPS数据,并通过地理编码软件包将数据转换为地址。将GPS位置转换为地址后,运行iOS模拟器时,我会收到以下错误:
flutter:错误databaseexception(错误域= fmdatabase代码= 11 “数据库磁盘图像已畸形” userInfo = {nslocalizedDescription =数据库磁盘映像已畸形}) SQL“开始独家” Args []在打开,关闭...
我还运行了Android模拟器,以查看它是否与iOS相关,或者是否可以更好地解释该错误。模拟器输出一个不同的错误消息:
[错误:flutter/lib/ui/ui_dart_state.cc(209)]未经手的例外: PlatformException(io_error,发生查找的网络错误 提供的坐标(纬度:37.421998,经度: -122.084000),null,null)
void initState() {
super.initState();
_requestPermission()
.then((_) => getPositionStream())
.catchError((error) => print(error.toString()));
currentUser = Provider.of<UserData>(context, listen: false).currentUserId;
_jobStream = FirebaseFirestore.instance
.collection('jobs')
.doc(widget.edittingJob.documentId)
.snapshots();
}
Future getPositionStream() async {
LocationSettings locationSettings;
if (defaultTargetPlatform == TargetPlatform.android) {
locationSettings = AndroidSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10,
forceLocationManager: true,
intervalDuration: const Duration(seconds: 1),
);
} else if (defaultTargetPlatform == TargetPlatform.iOS ||
defaultTargetPlatform == TargetPlatform.macOS) {
locationSettings = AppleSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10,
pauseLocationUpdatesAutomatically: true,
);
} else {
locationSettings = LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10,
);
}
_positionStream =
Geolocator.getPositionStream(locationSettings: locationSettings)
.listen((Position position) async {
List placeMarks =
await placemarkFromCoordinates(position.latitude, position.longitude);
setState(() {
_address = placeMarks[0].street.toString() +
', ' +
placeMarks[0].locality.toString() +
', ' +
placeMarks[0].administrativeArea.toString() +
', ' +
placeMarks[0].postalCode.toString() +
', ' +
placeMarks[0].country.toString();
});
});
}
Future<void> _requestPermission() async {
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return Future.error('Location services are disabled.');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return Future.error('Location permissions are denied');
}
}
if (permission == LocationPermission.deniedForever) {
return Future.error(
'Location permissions are permanently denied, we cannot request permissions.');
}
}
非常感谢任何建议!
I'm collecting GPS data via the Geolocator package and converting the data to an address via the Geocoding package. Upon converting the GPS location to an address, while running the iOS Simulator I receive the following error:
flutter: error DatabaseException(Error Domain=FMDatabase Code=11
"database disk image is malformed"
UserInfo={NSLocalizedDescription=database disk image is malformed})
sql 'BEGIN EXCLUSIVE' args [] during open, closing...
I also ran the Android Emulator to see if it's related to iOS or if I could get a better explanation about the error. The emulator outputs a different error message:
[ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception:
PlatformException(IO_ERROR, A network error occurred trying to lookup
the supplied coordinates (latitude: 37.421998, longitude:
-122.084000)., null, null)
void initState() {
super.initState();
_requestPermission()
.then((_) => getPositionStream())
.catchError((error) => print(error.toString()));
currentUser = Provider.of<UserData>(context, listen: false).currentUserId;
_jobStream = FirebaseFirestore.instance
.collection('jobs')
.doc(widget.edittingJob.documentId)
.snapshots();
}
Future getPositionStream() async {
LocationSettings locationSettings;
if (defaultTargetPlatform == TargetPlatform.android) {
locationSettings = AndroidSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10,
forceLocationManager: true,
intervalDuration: const Duration(seconds: 1),
);
} else if (defaultTargetPlatform == TargetPlatform.iOS ||
defaultTargetPlatform == TargetPlatform.macOS) {
locationSettings = AppleSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10,
pauseLocationUpdatesAutomatically: true,
);
} else {
locationSettings = LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 10,
);
}
_positionStream =
Geolocator.getPositionStream(locationSettings: locationSettings)
.listen((Position position) async {
List placeMarks =
await placemarkFromCoordinates(position.latitude, position.longitude);
setState(() {
_address = placeMarks[0].street.toString() +
', ' +
placeMarks[0].locality.toString() +
', ' +
placeMarks[0].administrativeArea.toString() +
', ' +
placeMarks[0].postalCode.toString() +
', ' +
placeMarks[0].country.toString();
});
});
}
Future<void> _requestPermission() async {
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return Future.error('Location services are disabled.');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return Future.error('Location permissions are denied');
}
}
if (permission == LocationPermission.deniedForever) {
return Future.error(
'Location permissions are permanently denied, we cannot request permissions.');
}
}
Very grateful for any advise!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论