我正在将Google Drive API用于小型程序,并且对任务的身份验证或执行没有任何问题。我的主要问题是我为异步API调用设置了resultcallback,但是从不调用回调。 以下示例:
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle(title).build();
Timber.d("Creating folder");
Drive.DriveApi.getRootFolder(apiClient).createFolder(
apiClient, changeSet).setResultCallback(
(DriveFolder.DriveFolderResult driveFolderResult) -> {
Timber.d("got response");
if (driveFolderResult.getStatus().isSuccess()) {
Timber.d("Folder successfully created " + title);
} else {
Timber.d("Could not create Folder " + title);
}
});
使用apiClient:
return new GoogleApiClient.Builder(context)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addOnConnectionFailedListener(connectionResult ->
handleConnectionFailure(connectionResult, mainActivity))
.build();
我在另一层添加了连接回调,但我认为这并不重要,因为它有效。
我看到每次执行方法时都会创建文件夹。我看到打印“正在创建文件夹”,但之后不会调用resultcallback。该文件夹创建速度非常快,因此我不知道为什么没有调用onResult。 有没有人有想法?文档经常过时,缺少完整的工作示例。
谢谢,
的Matthias
编辑: 导致执行create folder方法的代码:
public Observable<Boolean> createFolder(String title) {
Observable<Boolean> successObservable = Observable.create(subscriber -> {
createFolderCallback = new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
apiExecutor.createFolder(subscriber, title);
apiClient.unregisterConnectionCallbacks(createFolderCallback);
apiClient.disconnect();
}
@Override
public void onConnectionSuspended(int i) {
apiClient.unregisterConnectionCallbacks(createFolderCallback);
apiClient.disconnect();
}
};
apiClient.registerConnectionCallbacks(createFolderCallback);
apiClient.connect();
});
successObservable.compose(ObservableUtils.androidWorkTransformer());
return successObservable;
}
我没有使用其他对象,因为我使用了dagger2-module
中提供的单例对象答案 0 :(得分:4)
这些评论鼓励我再次阅读连接回调层,我发现在回调之前调用了断开连接!必须从disconnect()
方法中移除onConnected()
,并且必须在resultCallback
之后执行。
谢谢