我正在构建一个android应用程序,该应用程序保存从PlaceAutocomplete API检索到的位置ID。稍后,我将尝试使用getPlaceById()API获取该位置的详细信息。我看到回调永远不会被调用。
我已经设置了以下权限:
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
我还添加了API_KEY:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value=<API KEY>/>
但是,我无法检索到该地点的详细信息。"onResult"似乎从未被调用。有人能帮我找出可能出错的地方吗?
谢谢!
下面是我正在使用的代码片段。为了简单起见,在这里对PlaceId进行了硬编码:
PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi.getPlaceById(mGoogleApiClient, "ChIJi-t8KwUWrjsRlp-L9ykb2_k");
placeResult.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(PlaceBuffer places) {
Log.i(TAG, "Testing");
if (places.getStatus().isSuccess() && places.getCount() > 0) {
final Place myPlace = places.get(0);
Log.i(TAG, "Place found: " + myPlace.getName());
} else {
Log.e(TAG, "Place not found");
}
places.release();
}
});
我刚刚发现我错过了什么。我错过了对mGoogleApiClient.connect()的调用;在活动的onStart()中。现在效果很好!:)
下面链接中onCreate()中的注释指出,如果活动没有扩展FragmentActivity,我们需要显式调用connect()和disconnect()。
https://github.com/tangqi92/MyGooglePlaces/blob/master/app/src/main/java/itangqi/me/mygoogleplaces/MainActivity.java
我遇到了同样的问题。实际上,它并不是"没有被调用",而是"还没有运行"。这是我的错误代码。
public void onClick(View v) {
hideSoftKeyboard();
Log.i("Search Click", "getting Place: " + mMyLocation.id);
if(mMyLocation.id != null) {
Places.GeoDataApi.getPlaceById(mGoogleApiClient, mMyLocation.id)
.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(PlaceBuffer places) {
if (places.getStatus().isSuccess() && places.getCount() > 0) {
LatLng coord = places.get(0).getLatLng();
mMyLocation.setLatLng(coord.latitude, coord.longitude);
Log.i("Place by id", "Place found: " + mMyLocation.coordinateString);
} else {
Log.e("Place by id", "Place not found");
}
places.release();
}
});
searchNearby();
}
}
searchNearby()
函数使用本应在onResult
中更改的mMyLocation
。它还没有更改,这意味着在searchNearby()
运行之前还没有调用onResult
。然后我把函数searchNearby()
放到onResult
中,它就工作了。
因此,我的建议是:将您想在onResult
之后运行的任何内容放入其中。