Ошибка миграции при переходе на новый Google Maps SDK - PullRequest
1 голос
/ 19 января 2020

Я следовал руководству по миграции , поэтому я сделал следующие изменения в build.gradle

Предварительные условия:

  1. Это работало до переключения
  2. Требуется API Карт включен
  3. Также включен биллинг
  4. Используется правильный ключ API
dependencies {
    //noinspection GradleCompatible
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.android.gms:play-services-location:17.0.0'
    implementation 'com.google.android.gms:play-services-places:17.0.0'
    implementation 'com.google.android.libraries.places:places:2.1.0'
    implementation 'com.google.android.libraries.places:places-compat:2.1.0'
}

Теперь я получаю переменную ошибку для PLACE_DETECTION_API и GeoDataApi

Так я реализовал поиск в действии

SeachActivity. java

        //onCreate() method
        mGoogleApiClient = new GoogleApiClient
                .Builder(this)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .enableAutoManage(this, this)
                .build();

     @Override
    public void onConnected(@Nullable Bundle bundle) {
        PendingResult<AutocompletePredictionBuffer> result = 
        Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, "infopark", null, null);

        result.setResultCallback(new ResultCallback<AutocompletePredictionBuffer>() {
            @Override
            public void onResult(@NonNull AutocompletePredictionBuffer autocompletePredictions) {
                Log.i(TAG, "onConnected: Result" + autocompletePredictions);
            }
        });
    }

        @Override
        protected ArrayList<AutocompletePrediction> doInBackground(String... params) {

            if (mGoogleApiClient.isConnected()) {
                Log.i(TAG, "Starting autocomplete query for: " + strAddress);

                PendingResult<AutocompletePredictionBuffer> results =
                        Places.GeoDataApi
                                .getAutocompletePredictions(mGoogleApiClient, strAddress, null,
                                        null);

                AutocompletePredictionBuffer autocompletePredictions = results
                        .await(60, TimeUnit.SECONDS);

                final com.google.android.gms.common.api.Status status = 
                autocompletePredictions.getStatus();
                if (!status.isSuccess()) {
                    Log.e(TAG, "Error getting autocomplete prediction API call: " + 
                    status.toString());
                    autocompletePredictions.release();
                    return null;
                }

                Log.i(TAG, "Query completed. Received " + autocompletePredictions.getCount()
                        + " predictions.");
                return DataBufferUtils.freezeAndClose(autocompletePredictions);
            }
            Log.e(TAG, "Google API client is not connected for autocomplete query.");
            return null;
        }

SearchResultsRecycler. java

            public ViewHolder(View itemView) {
            super(itemView);

            txtPlace = (TextView) itemView.findViewById(R.id.txt_place);
            txtAddress = (TextView) itemView.findViewById(R.id.txt_address);

            itemView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    AutocompletePrediction item = mResultList.get(getLayoutPosition());
                    String placeId = item.getPlaceId();
                    CharSequence primaryText = item.getPrimaryText(null);

                    PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi
                            .getPlaceById(mGoogleApiClient, placeId);
                    placeResult.setResultCallback(mUpdatePlaceDetailsCallback);

                }
            });
        }
    }

Я изменил инициализацию на:

Places.initialize(getApplicationContext(), apiKey);
PlacesClient placesClient = Places.createClient(this);

Все еще ошибка существует. Я видел различные ответы здесь, некоторые говорят, что нужно использовать намерение, фрагмент, все та же проблема. Это довольно запутанно.

1 Ответ

1 голос
/ 25 января 2020

Вы зависите от устаревшего SDK, клиентской библиотеки и библиотеки совместимости. Вы можете реализовать только один из этих 3. Попробуйте удалить эти 2 зависимости:

implementation 'com.google.android.gms:play-services-places:17.0.0'
implementation 'com.google.android.libraries.places:places-compat:2.1.0'

, чтобы реализовать только клиентскую библиотеку в вашем build.gradle:

implementation 'com.google.android.libraries.places:places:2.1.0'

Затем убедитесь, что что вы:

(1) мигрировали на AndroidX
(2) импортировали клиентскую библиотеку через import com.google.android.libraries.places.api.Places
(3) включили Places API в вашем проекте

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...