앱에 Google Smart Lock을 구현 중이며 이전에 Api Client 빌딩에 문제가 없었습니다. 사실, 일부 구문 변경을 완료하고 코드 정리 (API 클라이언트를 초기화하는 코드조차하지 않음) 및 abstract method zza
으로 인해 build()
이 Api 클라이언트 빌더에서 호출 될 때 내 앱이 종료됩니다. 갑자기 실패 시작 내가 왜 단서가 없다GoogleApiClient 빌더가 빌드하지 못했습니다.
java.lang.AbstractMethodError: abstract method "com.google.android.gms.common.api.Api$zze com.google.android.gms.common.api.Api$zza.zza(android.content.Context, android.os.Looper, com.google.android.gms.common.internal.zzq, java.lang.Object, com.google.android.gms.common.api.GoogleApiClient$ConnectionCallbacks, com.google.android.gms.common.api.GoogleApiClient$OnConnectionFailedListener)"
at com.google.android.gms.common.api.GoogleApiClient$Builder.build(Unknown Source)
, 그리고 내가이 오류가 발생했을 그 변경 사항을 찾을 수 없습니다 : 여기에 오류가 표시되고있다. 왜 추상적 인 메소드가 오버라이드되지 않는가? 라이브러리의 깊숙한 곳에 중첩되어 있으므로 어떻게 영향을 미쳤는지 알 수 없습니다.
CredentialManager라는 관리자에서 Google Api Client 호출을 래핑했습니다. 이 오류의 원인이 무엇인지에 어떤 통찰력이있는 경우
public CredentialManager(ContextProvider contextProvider) {
mContextProvider = contextProvider;
mCredentialsApiClient = new GoogleApiClient.Builder(mContextProvider.getContext())
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.i(CredentialManager.TAG, "Api connected");
}
@Override
public void onConnectionSuspended(int i) {
Log.i(CredentialManager.TAG, "Connection suspended with status " + i);
}
})
.enableAutoManage(mContextProvider.getContext(), connectionFailedResult -> {
if (connectionFailedResult.hasResolution()) {
try {
connectionFailedResult.startResolutionForResult(
mContextProvider.getContext(),
CredentialManager.Codes.RESOLVE_CONNECTION_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
// Unable to resolve, log error
Log.e(CredentialManager.TAG, "Resolution failed: " + e.getMessage());
}
} else {
//instead of displaying a dialog, just let the user continue and login manually.
Log.e(CredentialManager.TAG, "Connection failed: " + connectionFailedResult.getErrorMessage());
}
})
.addApi(Auth.CREDENTIALS_API)
.build();
}
은 알려 주시기 바랍니다 : 여기에 내가 클라이언트를 초기화하는 데 사용되는 코드입니다. 전에 이런 걸 본 사람이라면 인터넷을 샅샅이 뒤졌지만 아무것도 찾을 수 없었습니다.