0

Я создаю приложение для Android, которое сохраняет идентификатор места, полученный из API PlaceAutocomplete. В более позднем пункте, я пытаюсь получить детали места, используя getPlaceById() API. Я вижу, что обратный вызов никогда не вызван.Google помещает getPlaceById callback, не получая вызова

Я установил следующее разрешение:

<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» никогда не вызывает звонка. Может кто-нибудь, пожалуйста, помогите мне, где я могу ошибиться?

Спасибо!

Ниже приведен фрагмент кода, который я использую. Для упрощения здесь был установлен HardIcode 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(); 
     } 
    }); 
+0

можете ли вы поделиться своим кодом, как вы строите запрос GoogleApiClient? –

+0

@kapilrajput Вот как я строю запрос: mGoogleApiClient = новый GoogleApiClient .Builder (это) .addApi (Places.GEO_DATA_API) .addApi (Places.PLACE_DETECTION_API) .addConnectionCallbacks (это) .addOnConnectionFailedListener (этот) .build(); –

+0

@kapilrajput Спасибо за вашу помощь :) –

ответ

2

Я только что узнал, что мне не хватает. Я пропустил вызов mGoogleApiClient.connect(); в onStart() активности. Сейчас работает как шарм! :)

Комментарий в ссылке onCreate() в приведенной ниже ссылке указывает, что нам нужно вызвать connect() и отключить() явно, если активность не расширяет FragmentActivity.

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

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() функция использует mMyLocation, которые должны были изменены в onResult. И он еще не изменен, что означает, что onResult не был вызван до запуска searchNearby(). Затем я положил функцию searchNearby() в onResult, и это сработало.

Так что мое предложение было бы: положить все, что вы хотите запустить после onResult в него.

Смежные вопросы