【发布时间】:2015-07-30 10:47:33
【问题描述】:
我正在为一个小程序使用 Google Drive API,并且对任务的身份验证或执行没有任何问题。我的主要问题是我为异步 API 调用设置了一个结果回调,但从未调用过回调。 以下示例:
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。 有人有想法吗?文档经常过时并且缺少完整的工作示例。
谢谢,
马蒂亚斯
编辑: 导致执行创建文件夹方法的代码:
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 中提供的单例对象
【问题讨论】:
-
您可以查看this Github中创建文件夹的示例演示。它在覆盖
public void onResult(DriveFolderResult result)中打印消息。你可以参考关于creating a folder in the root folder的新文档。 -
你能告诉我们你是如何“在另一层添加连接回调”的吗?创建一个新实例?
-
我已经尝试了我找到的所有演示,它们似乎没有回调问题,但我看不出代码有什么不同。我遵循了新文档,因此代码是相同的。我也使用 onResult 方法,它只是由于 lambdas 而被隐藏。 @seanpj 我添加了连接回调层。我注入了 dagger2 模块提供的单例对象,因此所有层都使用相同的实例
标签: android google-drive-api google-play-services google-drive-android-api