如何取消Android Places SDK的地点自动补全预测任务?
如何取消Android Places SDK的自动补全预测任务
嘿,这个问题我之前也遇到过!其实Google Places SDK的自动补全任务是可以取消的,只是需要你保存好返回的Task对象才行,具体做法如下:
1. 保存Task实例
首先,你需要把findAutocompletePredictions(request)返回的Task<AutocompletePredictionResponse>对象保存为类的成员变量,这样后续才能调用它的取消方法。比如在你的Activity/Fragment中声明:
private var autocompleteTask: Task<AutocompletePredictionResponse>? = null
2. 创建并关联任务
在发起自动补全请求时,将返回的Task赋值给这个成员变量,同时链式添加监听逻辑(沿用你原来的处理代码即可):
// 初始化Places客户端(你原有的代码) Places.initialize(applicationContext, ApiClient.GOOGLE_API_KEY) val placesClient = Places.createClient(this) // 假设你已经构建好自动补全请求对象 val request = FindAutocompletePredictionsRequest.builder() .setQuery("用户输入的关键词") // 可添加其他配置:比如设置国家、筛选地点类型等 .build() // 保存Task实例并绑定监听 autocompleteTask = placesClient.findAutocompletePredictions(request) .addOnSuccessListener { response -> for (prediction in response.autocompletePredictions) { Log.i(TAG, prediction.placeId) Log.i(TAG, prediction.getPrimaryText(null).toString()) } } .addOnFailureListener { exception -> if (exception is ApiException) { val apiException = exception as ApiException Log.e(TAG, "Place not found: " + apiException.statusCode) } } .addOnCancelledListener { Log.i(TAG, "自动补全任务已被取消") // 这里可以做清理工作,比如清空之前的预测结果列表 }
3. 取消任务
当你需要终止这个任务时(比如用户输入新关键词要取消旧请求、页面销毁时),直接调用Task的cancel()方法:
// 取消任务,参数true表示如果任务正在执行则中断它 autocompleteTask?.cancel(true) // 取消后建议置空实例,避免潜在的内存泄漏 autocompleteTask = null
补充说明
你之前没找到取消方法的原因是:直接链式调用了监听方法,没有保存返回的Task对象。这个Task属于Google Play Services的Task库,本身就内置了cancel()方法,同时也会触发你添加的addOnCancelledListener回调。
内容的提问来源于stack exchange,提问作者vepzfe
相关产品推荐
相关产品推荐

