切换到新的谷歌地图SDK时出现迁移错误



我遵循了迁移指南,所以我在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_APIGeoDataApi的可变错误

这就是我在活动中实现搜索的方式

搜索活动.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

希望这有帮助!

最新更新