You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何取消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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:41:11