【发布时间】:2016-04-16 02:53:03
【问题描述】:
我目前正在研究在 Android 设备与 Google Drive 之间同步数据的方法,偶然发现了 https://github.com/googledrive/android-quickeditor 的示例代码,但在打开现有文件然后点击“保存更改”时遇到了问题.基本上有问题的代码就在这里:
@Override
protected com.google.android.gms.common.api.Status doInBackground(DriveId... params) {
R await;
DriveFile file = params[0].asDriveFile();
PendingResult<DriveContentsResult> openDriveContentsResult = file.open(mClient, DriveFile.MODE_WRITE_ONLY, null);
if (!openDriveContentsResult.await().getStatus().isSuccess()) {
return openDriveContentsResult.await().getStatus();
}
Changes changes = edit(openDriveContentsResult.await().getDriveContents());
PendingResult<MetadataResult> metadataResult = null;
PendingResult<com.google.android.gms.common.api.Status> closeContentsResult = null;
if (changes.getMetadataChangeSet() != null) {
metadataResult = file.updateMetadata(mClient, changes.getMetadataChangeSet());
if (!metadataResult.await().getStatus().isSuccess()) {
return metadataResult.await().getStatus();
}
}
if (changes.getDriveContents() != null) {
closeContentsResult = changes.getDriveContents().commit(mClient, null);
closeContentsResult.await();
}
return closeContentsResult.await().getStatus();
}
引发错误的确切行是:
Changes changes = edit(openDriveContentsResult.await().getDriveContents());
错误是java.lang.IllegalStateException: Result has already been consumed。我提到了 PendingResult 类引用,它清楚地指出“使用await() 检索结果或传递给结果回调后,再次尝试检索结果是错误的。”我猜很公平。
问题是,我应该如何正确解决这个问题?我已经注释掉了
if (!metadataResult.await().getStatus().isSuccess()) {...}
现在为了避免调用await() 两次(为了调试),但是(如预期的那样)然后在
return closeContentsResult.await().getStatus();
那么...我该如何解决这个问题?漂亮吗?
【问题讨论】:
标签: android