Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java.lang.IllegalStateException:结果已被使用_Android - Fatal编程技术网

Android java.lang.IllegalStateException:结果已被使用

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()

我目前正在研究将Android设备与Google Drive之间的数据同步的方法,并在上偶然发现了示例代码,但在打开现有文件然后点击“保存更改”时遇到了一个问题。基本上,问题代码如下所示:

@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();
}
}