Android:Google Drive API - Resultcallback从未调用

时间:2015-07-30 10:47:34

标签: android google-drive-api google-play-services google-drive-android-api

我正在将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

中提供的单例对象

1 个答案:

答案 0 :(得分:4)

这些评论鼓励我再次阅读连接回调层,我发现在回调之前调用了断开连接!必须从disconnect()方法中移除onConnected(),并且必须在resultCallback之后执行。 谢谢