Google 地方 getPlaceById 回调未被调用
Google places getPlaceById callback not getting invoked
我正在构建一个 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(); 的电话。在 activity 的 onStart() 中。现在就像一个魅力! :)
下面 link 中 onCreate() 中的注释指出,如果 activity 不扩展 FragmentActivity,我们需要显式调用 connect() 和 disconnect()。
我遇到了同样的问题。实际上它不是 "not getting invoked" 而是 "haven't run yet"。
这是我的错误代码。
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
。而且它还没有被改变,这意味着 onResult
在 searchNearby()
运行 之前还没有被调用。
然后我将函数 searchNearby()
放入 onResult
并且它起作用了。
所以我的建议是:在 onResult
之后 运行 放入任何你想要的东西 。
我正在构建一个 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(); 的电话。在 activity 的 onStart() 中。现在就像一个魅力! :)
下面 link 中 onCreate() 中的注释指出,如果 activity 不扩展 FragmentActivity,我们需要显式调用 connect() 和 disconnect()。
我遇到了同样的问题。实际上它不是 "not getting invoked" 而是 "haven't run yet"。 这是我的错误代码。
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
。而且它还没有被改变,这意味着 onResult
在 searchNearby()
运行 之前还没有被调用。
然后我将函数 searchNearby()
放入 onResult
并且它起作用了。
所以我的建议是:在 onResult
之后 运行 放入任何你想要的东西 。