我正在尝试使用 Google Places(新)API 根据特定地址返回地点。这是请求的正文:
{
"textQuery" : "$query",
"locationBias": {
"circle": {
"center": {
"latitude": 37,
"longitude": -36
},
"radius": 50000
}
}
}
如果我传入“披萨”或“我附近的披萨”,我会得到一组在指定位置符合该描述的对象。其中之一是棒约翰 (Papa Johns),位于水星大道东 231 号。如果我传入 231 emercury blvd,我会得到一个空值和一个错误,日志中显示“序列名‘com.example.surge_app.data.GooglePlacesList’的类型需要字段‘places’,但它在以下位置缺失:路径:$”
这向我表明将 JSON 字符串反序列化为 Kotlin 对象时存在问题。这是我的 Kotlin 对象:
@Serializable
data class DisplayName(
val text: String,
val languageCode: String
)
@Serializable
data class Place(
val formattedAddress: String,
val displayName: DisplayName
)
@Serializable
data class GooglePlacesList(
val places: List<Place>
)
我使用了 API 文档中的“尝试”功能,可以在此处找到该功能。如果您将我的请求正文复制并粘贴到此链接的字段中,并将 $query 替换为 Pizza 或 231 e Mercury blvd,我会得到预期的响应。在我的应用程序中输入 231 e Mercury blvd 时得到的响应为空,我不确定为什么。
我已尽力遵循文档,但找不到我正在做的事情有任何问题。我检查了我的 gradle 依赖项,一切都正确。
我在使用 Swift 时与 Google 遇到了类似的问题。使用 Google 的 TextSearch API,我无法找到特定的商店。然而,在搜索“纽约披萨”等通用地点时,我得到了答案。我的解决方案是使用 Google 的 Autocomplete API,它可以返回特定的 PlaceID!
我的解决方案是用 Swift 编写的,但请随意检查一下: Swift 自动完成而不是文本搜索