【问题标题】:Google Places API Android resultCallback not firingGoogle Places API Android resultCallback 未触发
【发布时间】:2015-06-26 22:50:37
【问题描述】:

我正在使用适用于 Android 的 Google Places API,但我似乎无法从 PendingResult 中获取 resultCallback 来触发。这是我的代码(与https://github.com/googlesamples/android-play-places/tree/master/PlaceComplete 的示例代码基本相同,但在对话框中除外)

adapter = ((MainActivity) getActivity()).getAdapter();
googleApiClient = ((MainActivity) getActivity()).getGoogleApiClient();

final AutoCompleteTextView tvCity = new AutoCompleteTextView(getActivity());
tvCity.setAdapter(adapter);

tvCity.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        final PlacesAutoCompleteAdapter.PlaceAutocomplete item = adapter.getItem(position);
        final String placeId = String.valueOf(item.placeId);

        PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi
                .getPlaceById(googleApiClient, placeId);
        placeResult.setResultCallback(new ResultCallback<PlaceBuffer>() {
            @Override
            public void onResult(PlaceBuffer places) {

            if (places.getStatus().isSuccess()) {
                    final Place place = places.get(0);
                    cityCoordinates = place.getLatLng();

                } else {
                    dialog.dismiss();
                    Toast.makeText(getActivity(), "There was an error, please try again", Toast.LENGTH_SHORT).show();
                    return;

                }
                dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
                places.release();
            }
        });
    }
});

【问题讨论】:

  • 您是否为 API 创建了密钥,添加到项目中等等?
  • @AlvaroSantisteban 是的,当然,自动完成部分本身工作正常。就在我点击 autocompletetextview 中的一个项目时,ResultCallback 部分永远不会触发。

标签: android google-play-services google-places-api


【解决方案1】:

我遇到了同样的问题,因为我缺少允许 API 访问基于 Web 的服务的权限

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

【讨论】:

  • 是的,谢谢!我很惊讶关于这个问题的文档如此之少......
  • 不客气!让我更加困惑的是,只有在我使用相同的 API 密钥在我的设备上运行官方示例之后,我的应用程序中的 GeoDataApi.getPlaceById 调用才能在短时间内工作。 Google Play 服务必须缓存 API 密钥授权,然后允许从另一个不请求 READ_GSERVICES 权限的应用使用该密钥。
  • 是的,我也有同样的经历!
  • @Alex Baker,尽管我的应用程序已经使用了所需的权限,但我仍然面临这个问题。我发布了一个新问题stackoverflow.com/questions/29801555/…你们可以帮忙吗?谢谢。
【解决方案2】:

作为参考,任何访问此问题的人,请确保您完成以下所有 3 个步骤:

将您的 API 密钥添加到您的应用清单

<application>
...
 <meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="YOUR_API_KEY"/>
</application>

然后按照@Alex Baker 的建议包含在您的清单中

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

并且还启用 适用于 Android 的 Google Places API。 Google Places API 是一个不同的 API,您的调用将失败并显示 Places AutoComplete status 9001

【讨论】:

  • Google Places for Android API 不需要地图 API_KEY
  • 你说得对,Alex,我碰巧有 maps API_KEY,因为我使用的是 Google Maps V2 API,我认为它也适用于 places API...但是,不,那是错误的。即使它是同一个键,我们也必须将它放在 android manifest 上自己的标签中。
猜你喜欢
  • 1970-01-01
  • 2016-02-06
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2016-04-07
  • 1970-01-01
相关资源
最近更新 更多