【问题标题】:google drive modified date give wrong time谷歌驱动器修改日期给出错误的时间
【发布时间】:2014-02-15 12:29:36
【问题描述】:

我正在尝试创建一个使用谷歌驱动器存储文件的 android 应用程序。现在想通过任何设备检测同一文件中的更改。为了检测文件中的更改尝试使用以下代码获取文件的修改时间(使用新的 google drive api for android)https://developers.google.com/drive/android/get-started

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, fileId);
Metadata fmd = file.getMetadata(mGoogleApiClient).await().getMetadata();
Log.e("modified date",""+fmd.getModifiedDate()); 

但它给出的修改时间总是错误的。当其他设备(使用相同的应用程序)修改相同的文件时,它不会返回修改的时间。 有没有其他方法可以检测文件的变化???谢谢

我也使用下面的代码,但没有运气

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, fileId);
file.getMetadata(mGoogleApiClient).addResultCallback(new DemoClassForHandleCallBack());

public class DemoClassForHandleCallBack implements OnMetadataRetrievedCallback{

    @Override
    public void onMetadataRetrieved(MetadataResult result) {
        boolean isSuccess = result.getStatus().isSuccess();
            Log.i("is success",""+isSuccess);
        Metadata fmd = result.getMetadata();
        Log.e("modified date",""+fmd.getModifiedDate());
        }
    }

【问题讨论】:

  • 您是否检查了元数据是否被成功获取(在使用 ResultCallback 时)?
  • 是的,我检查过了,它总是返回成功 (Status{statusCode=SUCCESS, resolution=null}) thnx 寻求帮助
  • 你是从onConnected方法调用getFile吗?
  • 不,我是在从 ConnectionCallbacks 获取回调后执行此操作,但不是在 onConnected() 方法中,如果我想上传文件,它的工作正常,我认为它与 onConnected bcus 无关,只需使用 getModifiedDate( )
  • 在onConnected()方法中试试吧

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


【解决方案1】:

我不知道您是否还在寻找答案,但我自己解决了这个问题。

事实证明,元数据已过时/缓存,除非您先打开相关文件。

因此,工作代码如下:

DriveFile file;

// Trick Google Drive into fetching the remote file
// which has the latest metadata
file.open( getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null).await();

DriveResource.MetadataResult result = file.getMetadata(getGoogleApiClient()).await();
Metadata metadata = result.getMetadata();

// Get the modified date
metadata.getModifiedDate();

我希望这对其他人有所帮助。

【讨论】:

  • 我也在观察类似的行为。除非修改日期发生更改,否则我不会读取文件,这导致如果我重新启动整个过程,只会获取新文件。删除检查(并每次都提取)后,一切都按预期工作。
【解决方案2】:

不要使用修改日期来检测更改。您应该寻找对 etag 的更改。

【讨论】:

  • 但是在新的 Google drive android api 中没有像 etag 这样的东西
  • 我很抱歉。因为问题标签包括 google-drive-sdk 我没有意识到您指的是新的 android API。新 API 缺少很多完整的云端硬盘元数据。您只需等待 API 成熟,或重新使用传统 Drive。
【解决方案3】:

您是否使用了onMetadataRetrieved(MetadataResult result) API?从您的代码看来并非如此。您需要从onMetadaRetrieved 函数内部调用getMetaData() 方法。

【讨论】:

  • 能否请您将此代码粘贴到答案中?这里很难读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多