当前位置: 首页 > 知识库问答 >
问题:

getPlaceById()无法在Android上返回数据google places API/resultCallback未被调用

柏修洁
2023-03-14

我无法在Android上使用Google Places API检索位置细节。我调用getPlacyById()来获取特定的place_id。

在一个Android活动中,我设置了一个googleApiClient并调用connect()。apiClient连接成功。

然后,出于测试目的,我使用硬编码的place_id和resultCallback调用getPlaceById()。但是,resultCallback从不被调用。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.some_activity_layout);
    ButterKnife.inject(this);
    if (getActionBar() != null) {
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    if (mGoogleApiClient == null) {
        rebuildGoogleApiClient();
    }
    .....
    code_for_activity_init
    .....
}

protected synchronized void rebuildGoogleApiClient() {
    // When we build the GoogleApiClient we specify where connected and connection failed
    // callbacks should be returned, which Google APIs our app uses and which OAuth 2.0
    // scopes our app requests.
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            //.enableAutoManage(this, 0 /* clientId */, this)
            .addConnectionCallbacks(this)
            .addApi(Places.GEO_DATA_API)
            .build();
}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
protected void onStop() {
    super.onStop();
    mGoogleApiClient.disconnect();
}


@Override
public void onConnected(Bundle bundle) {
    // Successfully connected to the API client. Pass it to the adapter to enable API access.
    //addressesAdapter.setGoogleApiClient(mGoogleApiClient);
    Log.i("place api conn", "GoogleApiClient connected.");

}

@Override
public void onConnectionSuspended(int i) {
    // Connection to the API client has been suspended. Disable API access in the client.
    //mAdapter.setGoogleApiClient(null);
    Log.e("place api conn", "GoogleApiClient connection suspended.");
}

@OnLongClick(R.id.one_more_request)
public boolean getDataAgain(){
    Log.d("place", "getPlace By Id");
    PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi
            .getPlaceById(mGoogleApiClient, "ChIJIV6Mkke9oRQRcPq3KAx513M");
    placeResult.setResultCallback(mUpdatePlaceDetailsCallback);
    return true;
}

private ResultCallback<PlaceBuffer> mUpdatePlaceDetailsCallback
        = new ResultCallback<PlaceBuffer>() {
    @Override
    public void onResult(PlaceBuffer places) {
        if (!places.getStatus().isSuccess()) {
            // Request did not complete successfully
            Log.e("place", "Place query did not complete. Error: " + places.getStatus().toString());

            return;
        }
        // Get the Place object from the buffer.
        final Place place = places.get(0);

        // Format details of the place for display and show it in a TextView.
        //mPlaceDetailsText.
                Toast.makeText(MyActivity.this,/*setText(*/
                        formatPlaceDetails(getResources(), place.getName(),
                place.getId(), place.getAddress(), place.getPhoneNumber(),
                place.getWebsiteUri()), Toast.LENGTH_LONG).show();

        Log.i("place", "Place details received: " + place.getName());
    }
};
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

<罢工> Android:name=“com.google.android.maps.v2.api_key”Android:value=“WhateverGoogleMapsapIkeyYouHave”

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

其次,我必须为Android启用Google Places API

共有1个答案

广昊昊
2023-03-14

我错过了两件事。

首先是com.google.android.geo.api_key,它与com.google.android.maps.v2.api_key相同。只需在AndroidManifest文件上复制粘贴API键。

<罢工> Android:name=“com.google.android.maps.v2.api_key”Android:value=“WhateverGoogleMapsapIkeyYouHave”

<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="whatEverGoogleMapsApiKeyYouHave"/>
 类似资料:
  • 问题内容: 我正在开发具有以下功能的条形码扫描应用程序: •访问设备相机,在SurfaceView上预览相机,并自动重新对焦 •Attemtps使用两种方法解码条形码 a)在使用 onTouchEvent(MotionEvent event)的 SurfaceView touch上,尝试拍摄条形码的图片,但获取 java.lang.RuntimeException:takePicture失败 b)

  • 我想使用GooglePlaceAPI和自动完成视图。我有开发者控制台上的android和浏览器密钥。但当我尝试这些键API时,它返回空响应。 Logcat: D/Volley:[2651]a.a:请求的HTTP响应= 我的代码: 在onpostexecute日志中: 我是新来的google地方api,请帮我找到什么是错误的。

  • 我正在使用JSF 2.0创建页面: 我期待在单击复选框时被调用。但是,加载页面时调用一次setMyCheckboxValue()。 如果我写 每次点击都会收到警报。 我的问题是:当我收到警报时,为什么每次onclick事件都不调用? 注意:我也尝试过AJAX,但复选框保持不变。

  • 我使用的是Google Places API for Android,但似乎无法从中获取来激发。这里是我的代码(除了在对话框中之外,与https://github.com/googlesamples/android-play-places/tree/master/placeComplete的示例代码基本相同)

  • 我找到了一些很好的SO链接(如何从异步回调函数返回值?以及从node.js中的回调函数返回值等),但它们并不是不能为我的问题提供解决方案。 我的问题:能够得到异步调用的结果,但我如何使用这个结果返回我的函数? 这里获取callBackResponse的值为true或false,并希望将该值用作: