android google drive api - 查询文件第一次返回0文件,第二次没问题

时间:2015-02-20 08:28:01

标签: android google-drive-api google-drive-android-api

我有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)");
}

我这样做是因为它是在google drive api示例中实现的 - 查询文件。 我用同步功能做了很多测试。 但每当我的iCount第一次为0时。第二次是1.找到文件。

1 个答案:

答案 0 :(得分:1)

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

router.get('/signup',function(req,res,next){
  message = '';
  if(req.method == "POST"){
     //post data

  } else {
     res.render('signup');
  }
});

请注意,请勿过于频繁地尝试同步操作。

  

为避免设备和服务器过载,请同步   请求是有限的。在这种情况下,操作将失败   Drive.DriveApi.requestSync(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { if (status.getStatus().isSuccess()) { // Do you work here } } }); } 状态,表示同步   已经发生在最近,所以不需要另一个同步。   在足够的退避后重新尝试时,操作将成功   持续时间。