我遵循了迁移指南,所以我在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
的可变错误
这就是我在活动中实现搜索的方式
搜索活动.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;
}
搜索结果回收商.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);
错误仍然存在。我在这里看到了各种各样的答案,有些人告诉使用意图,碎片,仍然是相同的问题。这很令人困惑。
您依赖于已弃用的 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( 迁移到安卓X
(2( 通过import com.google.android.libraries.places.api.Places
导入客户端库
(3( 在项目上启用了位置 API
希望这有帮助!