Я следовал руководству по миграции , поэтому я сделал следующие изменения в build.gradle
Предварительные условия:
- Это работало до переключения
- Требуется API Карт включен
- Также включен биллинг
- Используется правильный ключ 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);
Все еще ошибка существует. Я видел различные ответы здесь, некоторые говорят, что нужно использовать намерение, фрагмент, все та же проблема. Это довольно запутанно.