最近将 Google API 版本从 11.8.0 升级到 12.0.1 导致task.result.release()
我的完成侦听器Task<AutocompletePredictionBufferResponse>
被标记为内部。
我应该以不同的方式处理内部数据泄露的可能性吗?Google Places API 现在是否自行处理发布结果?我在12.0.0 或 12.0.1 的发行说明中找不到有关此的信息。当前的文档仍然说您必须发布结果。
这是我使用它的地方:
.addOnCompleteListener { task: Task<AutocompletePredictionBufferResponse> ->
if (task.isSuccessful) {
{...}
//Release to avoid internal data leak
task.result.release()
} else {
Log.e("AutoCompletePredictions", task.exception?.message)
//Release to avoid internal data leak
task.result.release()
}
}
.addOnFailureListener(this@NewLocationActivity) {
Log.e("AutoCompletePredictions", it.message)
}
这是我收到的错误消息:
zzb.release 被标记为内部,不应从应用程序访问少... (⌘F1) 此 API 已被标记为具有尚未满足的限制。API 限制示例: * 方法只能由子类调用 * 方法只能从同一个库中访问(由 Gradle 库组 ID 定义)。* 方法只能从测试中访问。. 您可以使用 @RestrictTo 注释添加自己的 API 限制。
我使用完成侦听器的完整getSuggestions()
方法
private fun getSuggestions() {
val filter = AutocompleteFilter.Builder()
.setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS)
.setCountry(CountryManager.getCountryISO())
.build()
Places.getGeoDataClient(this@NewLocationActivity/*, null*/) // uncomment for v11.8.0
.getAutocompletePredictions(
activity_new_location_edit_text.text.toString(),
null,
filter
)
.addOnCompleteListener { task: Task<AutocompletePredictionBufferResponse> ->
if (task.isSuccessful) {
val addressList: ArrayList<String> = arrayListOf()
var index = 0
for(item in task.result) {
if(index >= MAX_SUGGESTION_RESULTS)
break
addressList.add(item.getFullText(null).toString())
index++
}
if(!(addressList.size == 1 && addressList[0] == activity_new_location_edit_text.text.toString()))
loadGoogleAddressesIntoSuggestionList(addressList)
//Release to avoid internal data leak
task.result.release()
} else {
Log.e("AutoCompletePredictions", task.exception?.message)
//Release to avoid internal data leak
task.result.release()
}
}
.addOnFailureListener(this@NewLocationActivity) {
Log.e("AutoCompletePredictions", it.message)
}
}