android google drive api-查询文件第一次返回0文件,第二次正常

android google drive api-查询文件第一次返回0文件,第二次正常,android,google-drive-api,google-drive-android-api,Android,Google Drive Api,Google Drive Android Api,我有一个android应用程序,它可以在谷歌硬盘上创建文件和读取文件(在设备之间同步sql lite db)。创建文件正在正常运行。读取文件也可以,但仅用于第二次尝试。第一次查询总是返回0。看起来像是第一次查询只检查本地存储 示例:我从移动设备创建导出。没关系。我可以看到该文件是创建的,我可以通过谷歌硬盘上的网页看到它。我也可以通过android驱动程序看到它。因此,我可以从我的应用程序从平板电脑导入此文件。第一次尝试每次都失败。查询找不到该文件。第二次尝试:找到并导入了文件。为什么会有这种行为

我有一个android应用程序,它可以在谷歌硬盘上创建文件和读取文件(在设备之间同步sql lite db)。创建文件正在正常运行。读取文件也可以,但仅用于第二次尝试。第一次查询总是返回0。看起来像是第一次查询只检查本地存储

示例:我从移动设备创建导出。没关系。我可以看到该文件是创建的,我可以通过谷歌硬盘上的网页看到它。我也可以通过android驱动程序看到它。因此,我可以从我的应用程序从平板电脑导入此文件。第一次尝试每次都失败。查询找不到该文件。第二次尝试:找到并导入了文件。为什么会有这种行为

查询的创建过程如下所示:

Query query = new Query.Builder().addFilter(Filters.and(
Filters.eq(SearchableField.MIME_TYPE, "text/xml"),
Filters.eq(SearchableField.TITLE,
getResources().getString(R.string.app_file_name)),
Filters.eq(SearchableField.TRASHED, false))).build();

Drive.DriveApi.query(mGoogleApiClient, query)
.setResultCallback(metadataCallback);
在回调结果中读取的文件如下所示:

MetadataBuffer mdbf = null;
mdbf =  result.getMetadataBuffer();
int iCount = mdbf.getCount();
tvout("file count: "+String.valueOf(iCount));
if (iCount == 1){
myFileId = mdbf.get(0).getDriveId();
Log.i(LOG_TAG, "file was found");
readFile();
}
else
{
displayAlertBox(getApplicationContext().getResources()
.getString(R.string.import_alert_res_not_ok)+" (ER-NOFILE)");
}
我这样做就像它是在谷歌驱动api示例-查询文件中实现的一样。 我也用同步功能做了很多测试。
但是每次我的iCount第一次是0。第二次是1。找到文件。

这是因为,本地同步需要一点时间来处理。如果您在请求完成之前提出请求,可能会得到不完整的结果。您可以使用等待同步完成

Drive.DriveApi.requestSync(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
     @Override
     public void onResult(@NonNull Status status) {       
         if (status.getStatus().isSuccess()) {
              // Do you work here
         }
     }
  });
}
Drive.DriveApi.requestSync(mGoogleApiClient.setResultCallback(new-ResultCallback()){
@凌驾
public void onResult(@NonNull Status状态){
if(status.getStatus().issucess()){
//你在这里工作吗
}
}
});
}
请注意,不要经常尝试同步操作

为了避免设备和服务器上的负载过大,请同步 请求是有速率限制的。在这种情况下,操作将失败
DRIVE\u RATE\u LIMIT\u超出状态,表示同步
最近已经发生了,所以不需要再次同步。
在充分退避后重新尝试时,操作将成功
持续时间


这里也是……你找到解决办法了吗?