【问题标题】:Why I always get "java.lang.IllegalStateException: DriveContents already closed."为什么我总是得到“java.lang.IllegalStateException:DriveContents 已经关闭。”
【发布时间】:2016-08-16 17:03:06
【问题描述】:

我正在制作一个最小的可行示例,以演示 How to avoid from always loading cached app data from Google Drive 中描述的错误

我已经在https://github.com/yccheok/google-drive-bug完成了代码

该代码旨在更新现有文本文件或编写新文本文件。

但是,在测试时,我总是在driveContents.commit 中遇到异常

Status status;
try {
    status = driveContents.commit(googleApiClient, null).await();
} catch (java.lang.IllegalStateException e) {
    // java.lang.IllegalStateException: DriveContents already closed.
    Log.e(TAG, "", e);
    return false;
}

异常详情如下。

java.lang.IllegalStateException: DriveContents already closed.
      at com.google.android.gms.drive.internal.zzv.zza(Unknown Source)
      at com.google.android.gms.drive.internal.zzv.commit(Unknown Source)
      at org.yccheok.demo.Utils.saveToGoogleDrive(Utils.java:233)
      at org.yccheok.demo.SaveFile123Task.doInBackground(SaveFile123Task.java:13)
      at org.yccheok.demo.SaveFile123Task.doInBackground(SaveFile123Task.java:10)
      at android.os.AsyncTask$2.call(AsyncTask.java:295)
      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
      at java.lang.Thread.run(Thread.java:818)

我调试了很长时间,仍然不知道为什么。我不认为我错过了任何步骤。

设置了正确的 API 密钥

重现问题的步骤

  1. 点击SAVE 123.TXT" WITH CONTENT "123"按钮。

不确定我错过了哪些步骤,导致此行总是抛出异常 - https://github.com/yccheok/google-drive-bug/blob/master/app/src/main/java/org/yccheok/demo/Utils.java#L233

谢谢。

【问题讨论】:

  • 查看有关 DriveContents 的文档,其中指出一旦 DriveContents 实例被提交、用于创建或丢弃,它就会关闭,并且任何后续方法调用都会抛出 IllegalStateException。如果对您有帮助,请查看此 File Contents 文档。
  • 感谢您的指出。我想,我不应该在driveFolder.createFile 之后调用 commit

标签: android google-drive-android-api


【解决方案1】:

根据https://developers.google.com/android/reference/com/google/android/gms/drive/DriveContents

一旦这个 DriveContents 实例被提交,用于 创建或丢弃,它会关闭并且任何后续方法 调用将抛出 IllegalStateException。

我不应该在driveFolder.createFile 之后调用driveContents.commit

我通过https://github.com/yccheok/google-drive-bug/commit/70919dcfe3fd9108c3af9ecf939a6c0ef03e07cc 进行了修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多