此方法是否在单例模式上运行? 还是每次都为用户创建新会话?
下面的方法在编辑文本更改侦听器上调用。
@NonNull
private ArrayList<PlaceAutocomplete> getPredictions(@NonNull CharSequence constraint) {
final ArrayList<PlaceAutocomplete> resultList = new ArrayList<>();
// Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
// and once again when the user makes a selection (for example when calling fetchPlace()).
AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();
//https://gist.github.com/graydon/11198540
// Use the builder to create a FindAutocompletePredictionsRequest.
FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
.setLocationBias(bounds)
.setCountry("PK")
.setSessionToken(token)
.setQuery(constraint.toString())
.build();
Task<FindAutocompletePredictionsResponse> autocompletePredictions = placesClient.findAutocompletePredictions(request);
// This method should have been called off the main UI thread. Block and wait for at most
// 60s for a result from the API.
try {
Tasks.await(autocompletePredictions, 60, TimeUnit.SECONDS);
} catch (@NonNull ExecutionException | InterruptedException | TimeoutException e) {
e.printStackTrace();
}
if (autocompletePredictions.isSuccessful()) {
FindAutocompletePredictionsResponse findAutocompletePredictionsResponse = autocompletePredictions.getResult();
if (findAutocompletePredictionsResponse != null)
for (AutocompletePrediction prediction : findAutocompletePredictionsResponse.getAutocompletePredictions()) {
Log.i(TAG, prediction.getPlaceId());
resultList.add(new PlaceAutocomplete(prediction.getPlaceId(), prediction.getPrimaryText(STYLE_NORMAL).toString(), prediction.getFullText(STYLE_BOLD).toString()));
}
return resultList;
} else {
return resultList;
}
}
该方法调用编辑文本中的每个文本更改。
AutocompleteSessionToken.newInstance()
方法返回一个新实例,即一个新的会话令牌。每次调用此方法时,都会创建一个新的会话令牌。
Google 在此处解释了自动完成会话的工作原理:
会话令牌对用户的查询和选择阶段进行分组 自动完成搜索离散会话以进行计费。这 会话在用户开始键入查询时开始,并在 他们选择一个地方。每个会话可以有多个查询,然后 通过一个地方选择。会话结束后,令牌为否 有效期更长;应用必须为每个会话生成一个新令牌。
当用户从自动完成预测中选择地点时,editText 中的文本会发生变化(会话结束,当用户选择新地点时将创建一个新地点(。
希望这有帮助!