无法通过 Android 驱动器 API 获得自定义 属性
Unable to get custom property via Android Drive API
使用自定义 属性 创建文件和查询文件工作正常,但无法在 queryChildren() ResultCallback 中检索自定义 属性。
这是 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()" 因为它是查询条件之一,对吗?
如有任何建议,我们将不胜感激。
刚发现onCompletion回调后需要稍等片刻(几分钟)才能正确获取自定义属性。
因此,如果您不需要在 onCompletion 回调后立即获得自定义 属性,这应该是 none 问题。
这不是预期的。如果自定义 属性 是在本地文件上添加的(即在您查询的同一台设备上),您应该能够在不等待完成事件的情况下检索属性。您可以尝试在设备离线时执行此操作吗?
使用自定义 属性 创建文件和查询文件工作正常,但无法在 queryChildren() ResultCallback 中检索自定义 属性。
这是 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()" 因为它是查询条件之一,对吗?
如有任何建议,我们将不胜感激。
刚发现onCompletion回调后需要稍等片刻(几分钟)才能正确获取自定义属性。 因此,如果您不需要在 onCompletion 回调后立即获得自定义 属性,这应该是 none 问题。
这不是预期的。如果自定义 属性 是在本地文件上添加的(即在您查询的同一台设备上),您应该能够在不等待完成事件的情况下检索属性。您可以尝试在设备离线时执行此操作吗?