android - Retrofit2 调用 android 谷歌地图 Api 不起作用
问题描述
我在一个 android 项目中使用改造,以便能够调用 google maps api 并获得地点的自动完成建议。我正在为调用传递一个地址(字符串参数类型)。RetrofitCaller 类的 start 方法如下所示:
private val BASE_URL = "https://maps.googleapis.com/maps/"
fun start(address: String) {
val gson = GsonBuilder()
.setLenient()
.create()
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
val placeAutoCompleteAPI: PlaceAutoCompleteAPI =
retrofit.create(PlaceAutoCompleteAPI::class.java)
val call: Call<PredictionResponse?>? = placeAutoCompleteAPI.loadPredictions(address)
call?.enqueue(this)
}
PlacesAutoCompleteApi 具有带有 loadPredictions 函数的 http 请求:
@GET("api/place/autocomplete/json?types=address&key=AIzaSyApUcl88FpB4xHH0HS9FW4WC4wHaJu3VVU")
fun loadPredictions(@Query("input") address: String?): Call<PredictionResponse?>?
但是我无法从服务器获得响应。我正在为从服务器查询返回的数据类型使用 PredictionResponse 和 Prediction 类。
代码或方法有什么问题?
提前谢谢你,兰普罗斯
解决方案
我对editText使用位置自动完成,它的工作原理是这样的:
创建谷歌云帐户并为自己获取一个 API 密钥(如果你想使用自动完成,你可能拥有它)。在那里你设置了 API 必须工作的包。
在清单中添加以下内容:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
正在使用中
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.libraries.places:places:2.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
如果有人按下编辑文本,则只有 3 行代码:
val fields = listOf(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG, Place.Field.ADDRESS)
val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.OVERLAY, fields).build(this@AddPlaceActivity)
startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE)
如果不需要,可以删除 lat 和 lng 值。
推荐阅读
- javascript - React Redux TypeError:传播不可迭代实例的无效尝试
- r - 删除前 n 个单词并计数
- ms-access - 如何在 ms 访问中编写一个将运行 sql 的宏
- mysql - 如何通过添加现有表列将扩展表添加到现有表
- excel - 如何在特定条件下对数据进行分组以及如何获取其中的最小数据
- javascript - 结果为假时重试订阅
- c# - 如何通过加入获得最大日期的记录?
- sql - 如何在sql server中获取当前年份完整月份列表和往年完整月份列表?
- c# - 某些类的 ctor 中的常见接口用法
- javascript - 在服务器上记录客户端 JavaScript 错误