Android java.lang.IllegalStateException:结果已被使用
我目前正在研究将Android设备与Google Drive之间的数据同步的方法,并在上偶然发现了示例代码,但在打开现有文件然后点击“保存更改”时遇到了一个问题。基本上,问题代码如下所示:Android java.lang.IllegalStateException:结果已被使用,android,Android,我目前正在研究将Android设备与Google Drive之间的数据同步的方法,并在上偶然发现了示例代码,但在打开现有文件然后点击“保存更改”时遇到了一个问题。基本上,问题代码如下所示: @Override protected com.google.android.gms.common.api.Status doInBackground(DriveId... params) { R await; DriveFile file = params[0].asDriveFile()
@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();
}
错误为java.lang.IllegalStateException:结果已被使用
。我引用了Pendingreult类引用,它清楚地指出“在使用await()
检索结果或将结果传递到结果回调后,再次尝试检索结果是错误的。”我想这是很公平的
问题是,我该如何正确地解决这个问题?我已经评论过了
if (!metadataResult.await().getStatus().isSuccess()) {...}
现在,为了避免调用两次await()
(为了调试),但是(正如预期的那样)在
return closeContentsResult.await().getStatus();
那么…我该怎么解决这个问题呢?漂亮吗?解决了。对于任何对此感到沮丧的人:
@Override
protected com.google.android.gms.common.api.Status doInBackground(DriveId... params)
{
R await;
DriveFile file;
Changes changes;
PendingResult<DriveContentsResult> openDriveContentsResult;
DriveContentsResult driveContentsResult;
PendingResult<MetadataResult> updateMetadataResult;
MetadataResult metaDataResult;
PendingResult<com.google.android.gms.common.api.Status> commitResults;
com.google.android.gms.common.api.Status closeContentResults = null;
file = params[0].asDriveFile();
openDriveContentsResult = file.open(mClient, DriveFile.MODE_WRITE_ONLY, null);
driveContentsResult = openDriveContentsResult.await();
if (!driveContentsResult.getStatus().isSuccess())
{
return driveContentsResult.getStatus();
}
changes = edit(driveContentsResult.getDriveContents());
updateMetadataResult = null;
commitResults = null;
if (changes.getMetadataChangeSet() != null)
{
updateMetadataResult = file.updateMetadata(mClient, changes.getMetadataChangeSet());
metaDataResult = updateMetadataResult.await();
if (!metaDataResult.getStatus().isSuccess())
{
return metaDataResult.getStatus();
}
}
if (changes.getDriveContents() != null)
{
commitResults = changes.getDriveContents().commit(mClient, null);
closeContentResults = commitResults.await();
}
if (null == commitResults)
{
return commitResults.await().getStatus();
}
else
{
return closeContentResults.getStatus();
}
}
@覆盖
受保护的com.google.android.gms.common.api.Status doInBackground(DriveId…params)
{
R等待;
驱动文件;
变化;
Pendingreult openDriveContentsResult;
DriveContentsResult驱动内容sResult;
Pendingreult updateMetadataResult;
MetadataResult MetadataResult;
Pendingreult委员会结果;
com.google.android.gms.common.api.Status closeContentResults=null;
file=params[0]。asDriveFile();
openDriveContentsResult=file.open(mClient,DriveFile.MODE\u WRITE\u ONLY,null);
driveContentsResult=openDriveContentsResult.await();
如果(!driveContentsResult.getStatus().isSuccess())
{
返回driveContentsResult.getStatus();
}
更改=编辑(driveContentsResult.getDriveContents());
updateMetadataResult=null;
commitResults=null;
if(changes.getMetadataChangeSet()!=null)
{
updateMetadataResult=file.updateMetadata(mClient,changes.getMetadataChangeSet());
metaDataResult=updateMetadataResult.await();
如果(!metaDataResult.getStatus().isSuccess())
{
返回metaDataResult.getStatus();
}
}
if(changes.getDriveContents()!=null)
{
commitResults=changes.getDriveContents().commit(mClient,null);
closeContentResults=commitResults.await();
}
if(null==commitResults)
{
返回commitResults.await().getStatus();
}
其他的
{
返回closeContentResults.getStatus();
}
}
已解决。对于任何对此感到沮丧的人:
@Override
protected com.google.android.gms.common.api.Status doInBackground(DriveId... params)
{
R await;
DriveFile file;
Changes changes;
PendingResult<DriveContentsResult> openDriveContentsResult;
DriveContentsResult driveContentsResult;
PendingResult<MetadataResult> updateMetadataResult;
MetadataResult metaDataResult;
PendingResult<com.google.android.gms.common.api.Status> commitResults;
com.google.android.gms.common.api.Status closeContentResults = null;
file = params[0].asDriveFile();
openDriveContentsResult = file.open(mClient, DriveFile.MODE_WRITE_ONLY, null);
driveContentsResult = openDriveContentsResult.await();
if (!driveContentsResult.getStatus().isSuccess())
{
return driveContentsResult.getStatus();
}
changes = edit(driveContentsResult.getDriveContents());
updateMetadataResult = null;
commitResults = null;
if (changes.getMetadataChangeSet() != null)
{
updateMetadataResult = file.updateMetadata(mClient, changes.getMetadataChangeSet());
metaDataResult = updateMetadataResult.await();
if (!metaDataResult.getStatus().isSuccess())
{
return metaDataResult.getStatus();
}
}
if (changes.getDriveContents() != null)
{
commitResults = changes.getDriveContents().commit(mClient, null);
closeContentResults = commitResults.await();
}
if (null == commitResults)
{
return commitResults.await().getStatus();
}
else
{
return closeContentResults.getStatus();
}
}
@覆盖
受保护的com.google.android.gms.common.api.Status doInBackground(DriveId…params)
{
R等待;
驱动文件;
变化;
Pendingreult openDriveContentsResult;
DriveContentsResult驱动内容sResult;
Pendingreult updateMetadataResult;
MetadataResult MetadataResult;
Pendingreult委员会结果;
com.google.android.gms.common.api.Status closeContentResults=null;
file=params[0]。asDriveFile();
openDriveContentsResult=file.open(mClient,DriveFile.MODE\u WRITE\u ONLY,null);
driveContentsResult=openDriveContentsResult.await();
如果(!driveContentsResult.getStatus().isSuccess())
{
返回driveContentsResult.getStatus();
}
更改=编辑(driveContentsResult.getDriveContents());
updateMetadataResult=null;
commitResults=null;
if(changes.getMetadataChangeSet()!=null)
{
updateMetadataResult=file.updateMetadata(mClient,changes.getMetadataChangeSet());
metaDataResult=updateMetadataResult.await();
如果(!metaDataResult.getStatus().isSuccess())
{
返回metaDataResult.getStatus();
}
}
if(changes.getDriveContents()!=null)
{
commitResults=changes.getDriveContents().commit(mClient,null);
closeContentResults=commitResults.await();
}
if(null==commitResults)
{
返回commitResults.await().getStatus();
}
其他的
{
返回closeContentResults.getStatus();
}
}