flutter - 我一直在使用反向地理编码 api,然后我得到了这个错误?
问题描述
E/flutter (23931): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] 未处理异常: RangeError (index): 无效值: 有效值范围为空: 0
import 'package:geolocator/geolocator.dart';
import 'package:rider_app/Assistants/resquestAssitant.dart';
import 'package:rider_app/configMaps.dart';
class AssistantMethods {
static Future<String> searchCoordinateAddress(Position position) async {
String placeAddress = "";
String url = "https://maps.googleapis.com/maps/api/geocode/json? latlng=${position.latitude},${position.longitude}&key=$code";
var response = await RequestAssistant.getRequest(url);
if (response != "failed") {
placeAddress = response["results"][0]["formatted_address"];
}
return placeAddress;
}
}
解决方案
这意味着 API 没有返回结果,您正在response["results"][0]
无条件访问,但它可以并且在您的情况下确实没有返回任何结果。
您应该检查它是否不为空并且它们确实是结果列表,然后访问 index[0]。
例如,如果您传递坐标,则可能会发生此结果,但 Google 无法解释为地点或人类可读的地址。如果您在模拟器上,或者LatLng(0.0,0.0)
在大西洋中部分配随机启动,则会发生很多事情。我以前做过类似的事情。或者基本上任何其他不让 Google 返回响应的原因,如果您对 API 设置速率限制,或者陷入无限循环,最终暂时限制您的 API 请求的速率。先检查那些。
将您的 if 语句更改为:
if (response != "failed" && response["results"].isNotEmpty ) {
placeAddress = response["results"][0]["formatted_address"];
}else{
placeAddress = "Error in retrieving address info";}
推荐阅读
- java - 如何在 .graphql 文件中编写 GraphQl Upsert Query
- mysql - 在mysql中计为单行多行
- r - 导入的 csv 文件中的数据帧行数达到最大 40k
- google-apps-script - Google App Script - 单击重置按钮后取消选中复选框
- r - 在 git push 上运行单元测试,在 pull request 上运行集成测试
- c# - 在结构映射 4 中的注册表类中获取容器实例
- arraylist - 如何在 C# 中创建一个 ArrayList
- coldfusion - 如何将 listAppend() 与空数组值一起使用?(冷融合)
- wordpress - Wordpress 短代码返回带有短代码的 html 字符串
- spring - 如何在 Spring Boot Redis Session 实现中捕获 Redis 连接失败?