0

我正在构建一个 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();
        }
    });
4

2 回答 2

2

我刚刚发现我错过了什么。我错过了调用 mGoogleApiClient.connect(); 在活动的 onStart() 中。现在就像一个魅力!:)

以下链接中 onCreate() 中的注释指出,如果活动不扩展 FragmentActivity,我们需要显式调用 connect() 和 disconnect()。

https://github.com/tangqi92/MyGooglePlaces/blob/master/app/src/main/java/itangqi/me/mygoogleplaces/MainActivity.java

于 2016-01-11T09:37:21.057 回答
0

我遇到了同样的问题。实际上它不是“没有被调用”而是“还没有运行”。这是我的错误代码。

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()功能使用。而且它还没有被改变,这意味着在运行之前没有被调用。然后我把这个功能放进去,它就起作用了。mMyLocationonResultonResultsearchNearby()searchNearby()onResult

所以我的建议是:把你想跑的任何东西onResult放进去

于 2017-05-07T16:19:04.920 回答