2015-06-02 72 views
0

使用自定义属性创建文件和查询文件可以正常工作,但无法检索queryChildren()ResultCallback中的自定义属性。无法通过Android Drive API获取自定义属性

这里是CustomProperty的定义:

/** 
* CustomPropertyKey: Uploaded file's hash code 
*/ 
public static final CustomPropertyKey CustomPropertyKeyFileHash = 
     new CustomPropertyKey("fileHash", CustomPropertyKey.PUBLIC); 

查询条件:

  Query query = new Query.Builder() 
       .addFilter(
         Filters.and(
           Filters.eq(SearchableField.MIME_TYPE, sMimeType), 
           Filters.eq(BaseDemoActivity.CustomPropertyKeyFileHash, mDriveFile.getMD5()), 
           Filters.eq(SearchableField.TRASHED, false) 
         ) 
       ).build(); 

      mDriveFile.getDriveFolder().queryChildren(mGoogleApiClient, query) 
       .setResultCallback(mResultCallback); 

查询结果的回调:

  public void onResult(DriveApi.MetadataBufferResult result) { 
       if (!result.getStatus().isSuccess()) { 
        showMessage("Problem while retrieving results"); 
        return; 
       } 

       MetadataBuffer mdb = result.getMetadataBuffer(); 
       if (mdb.getCount() > 0) { 
        try { 
         if (mdb != null) { 
          for (Metadata md : mdb) { 
           if (md == null) continue; 

           Log.d(TAG, "[FileMetadataCallback][onResult] md.getTitle(): " + md.getTitle() + ", md.getDriveId(): " + md.getDriveId()); 
           Log.d(TAG, "[FileMetadataCallback][onResult] md.getTitle(): " + md.getTitle() + ", md.getResourceId(): " + md.getDriveId().getResourceId()); 

           Map<CustomPropertyKey, String> map = md.getCustomProperties(); 
           if (map != null) { 
            Log.d(TAG, "[FileMetadataCallback][onResult] file custom properties size: " + map.size()); 
            if (map.size() > 0) { 
             Log.d(TAG, "[FileMetadataCallback][onResult] file hash: " + map.get(CustomPropertyKeyFileHash)); 
            } 
           } 
          } 
         } 
        } finally { 
         if (mdb != null) mdb.close(); 
        } 
       } 
      } 

我总是日志“[FileMetadataCallback] [onResult]文件自定义属性大小:0“。 但是,我应该能够检索“mDriveFile.getMD5()”,因为它是查询条件之一,对吧?

任何建议表示赞赏。

+0

刚刚发现它需要等待一会儿才能在onCompletion回调之后正确地获取自定义属性。 – Caxton

+0

面对同样的问题和自定义键扮演着重要的角色,因为我使用它来避免上传已上传的文件,通过检查设置为自定义属性的ID,同时首次上传。任何帮助? – Ravi

回答

1

刚发现它需要稍等片刻(几分钟)才能在onCompletion回调之后正确地获得自定义属性。 因此,如果您不需要在onCompletion回调之后立即获取定制属性,那么这应该不是问题。

0

这不是预期的。如果自定义属性在本地添加到文件上(即在您查询的相同设备上),则应该可以在不等待完成事件的情况下检索属性。当设备脱机时,您可以尝试这样做吗?

相关问题