我有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.找到文件。
答案 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 } } }); }
状态,表示同步 已经发生在最近,所以不需要另一个同步。 在足够的退避后重新尝试时,操作将成功 持续时间。