【问题标题】:Android: Google Drive API - Resultcallback never calledAndroid:Google Drive API - Resultcallback 从未调用
【发布时间】: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


【解决方案1】:

cmets鼓励我再看一遍connection回调层,发现disconnect是在回调之前调用的! disconnect() 必须从onConnected() 方法中删除,并且必须在resultCallback 之后执行。 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-06
    • 2015-06-26
    • 2019-10-14
    • 2021-06-14
    • 2015-06-30
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    相关资源
    最近更新 更多