首页 > 解决方案 > 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 类。

代码或方法有什么问题?

提前谢谢你,兰普罗斯

标签: androidapikotlinmapsretrofit

解决方案


我对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 值。


推荐阅读