地理定位器/地理编码错误

发布于 2025-01-23 05:18:40 字数 3079 浏览 7 评论 0原文

我正在通过地理定位器软件包收集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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文