GeoDataClient。自动完成预测任务取消

时间:2018-07-12 06:24:57

标签: android google-places-api

是否有任何方法可以取消最新的自动完成预测任务以节省使用量限制。

例如,每次我快速键入文本或删除符号时,都会创建新任务。半秒后,我异步收到所有结果。

我需要做的就是保存上一个输入任务并在创建带有新查询的新任务之前取消它。

那么您可以取消getAutocompletePredictions(...)任务吗?或者已经存在任何方法可以完全取消此任务?

请不要建议任何延迟输入,处理程序和计时器。

到目前为止,我要做的只是取消显示结果:

override fun afterTextChanged(s: Editable?) {
        cancellationSource?.cancel()
        cancellationSource = CancellationTokenSource()
        val cancelableAutocompleteListTask = TaskCompletionSource<AutocompletePredictionBufferResponse>(cancellationSource!!.token)
        geoDataClient.getAutocompletePredictions(s?.toString(), null, autocompleteFilter)
                .addOnCompleteListener { response ->
                    if (response.isSuccessful) cancelableAutocompleteListTask.trySetResult(response.result)
                    response.exception?.let { cancelableAutocompleteListTask.setException(it) }
                }
        cancelableAutocompleteListTask.task
                .addOnCompleteListener { response ->
                    if (response.isCanceled) return@addOnCompleteListener
                    if (response.isSuccessful && response.result != null) {
                        val filteredResults = response.result?.map {
                            "PLACE name = ${it.getFullText(null)}, it.placeTypes = ${it.placeTypes?.joinToString()}".log
                            it
                        }?.filter { it.isDataValid }
                        placeAutocompleteAdapter.setNewData(filteredResults)
                        c_recognize_address_autocomplete.visibility = if (filteredResults?.isEmpty() == false) View.VISIBLE else View.GONE
                    } else {
                        c_recognize_address_autocomplete.visibility = View.GONE
                        "error = ${response.exception}".toastView
                    }
                }
    }

因此,尽管我可以使用cancelSourceSource.token取消cancelableAutocompleteListTask,但我仍然收到geoDataClient.getAutocompletePredictions(...)的所有结果,从而减少了使用配额。

感谢您的理解。希望能尽快得到答案。

0 个答案:

没有答案