我一直在使用反向地理编码 api,然后我收到了这个错误?

问题描述

E/Flutter (23931): [错误Flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:RangeError(索引):无效值:有效值 范围为空: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";}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...