题:
从ID字符串创建Place
对象的最干净方法是什么?
我想用硬编码的ID制作一些place
对象。
像Place place1 = new Place("ChIJS_zBNNbXAhURy-FuRT5ib9k")
这样的东西,但是这种做法是行不通的。
我遇到了GeoDataApi.getPlaceById
,但是文档令人困惑。
该API通常用于查找用户输入的内容(可以选择使用自动补全功能),但是我需要更小,更整洁的东西(请考虑:单元测试的目的)
我的研究:
How to get a Place by ID
要通过ID获得位置,请调用GeoDataApi.getPlaceById
,并传递一个或多个位置ID。
API在PlaceBuffer
中返回PendingResult
。 PlaceBuffer
包含与提供的场所ID匹配的Place
对象的列表。
说明文件:
Place
(所需对象)
PlaceBuffer
(可转换为地方)
PendingResult
getPlaceById
(返回PendingResult)
我坚持的是:
我找不到将PendingResult
转换为PlaceBuffer
的优雅方法。
API在PlaceBuffer
中返回PendingResult
。
...
来自PendingResult<R>
的最终结果对象的类型为R
,可以用以下两种方法之一进行检索。
通过阻止对await()
或await(long, TimeUnit)
的调用,或
通过将实现接口ResultCallback
的对象传递给setResultCallback(ResultCallback)
通过回调。
回调太混乱了,我找不到使用await
来学习的代码。
最佳答案
您可以轻松地将PendingResult
从getPlaceById
转换为PlaceBuffer
。您只需调用await()
方法:
PendingResult<PlaceBuffer> result = Places.GeoDataApi.getPlaceById(
mGoogleApiClient, placeId);
PlaceBuffer placeBuffer = result.await();
(如果愿意,您当然可以在一行中执行此操作。)
有在https://github.com/googlesamples/android-play-places中调用
GeoDataApi.getPlaceByID
和PendingResult<PlaceBuffer>.await
的示例。