2015-01-07 1 views
0

Google 드라이브 Android API (GDAA)로 작업 할 때 종종 DriveId로 식별되는 GDAA 개체의 부모 목록을 검색해야합니다. 그러나 나는 부모 목록을 제공 할 수있는 직접적인 방법을 찾지 못했습니다. 이를 얻는 유일한 방법은 DriveId를 DriveFile 또는 DriveFolder로 변환 한 다음 listParents (GoogleApiClient) 메소드를 적용하는 것입니다.DriveId에서 파일 대 폴더를 식별하는 방법

그리고 여기, 나는 점점 부모를위한 코드가 추한 켤 수있는 상황으로 실행, 같은 (이 단순화 은, 원래는뿐만 아니라/캐치 논리 시도가) :

static private GoogleApiClient mGAC; 
... 
ArrayList<DriveId> getParents(DriveId dId) { 
    ArrayList<DriveId> prnts = new ArrayList<>(); 
    if (dId != null) { 
     DriveFile dFile = Drive.DriveApi.getFile(mGAC, dId); 
     if (dFile != null) { 
     MetadataBufferResult rslt = dFile.listParents(mGAC).await(); 
     if (rslt.getStatus().isSuccess()) { 
      MetadataBuffer mdb = null; 
      try { 
      mdb = rslt.getMetadataBuffer(); 
      for (Metadata md : mdb) { 
       if (md == null || !md.isDataValid() || md.isTrashed()) continue; 
       prnts.add(md.getDriveId(); 
      } 
      } finally { if (mdb != null) mdb.close(); } 
     } 
     } else { 
     DriveFolder dFldr = Drive.DriveApi.getFolder(mGAC, dId); 
     if (dFldr != null) { 
      MetadataBufferResult rslt = dFldr.listParents(mGAC).await(); 
      if (rslt.getStatus().isSuccess()) { 
      MetadataBuffer mdb = null; 
      try { 
       mdb = rslt.getMetadataBuffer(); 
       for (Metadata md : mdb) { 
       if (md == null || !md.isDataValid() || md.isTrashed()) continue; 
       prnts.add(md.getDriveId(); 
       } 
      } finally { if (mdb != null) mdb.close(); } 
      } 
     } 
     } 
    } 
    return prnts; 
    } 

이력서 :

  • DriveId가 DriveFile로 성공적으로 바뀌는 지 확인하고 그렇지 않은 경우 DriveFolder로 다시 테스트하면 실제로 불안정합니다.
  • DriveId에서 상위 ID를 직접 가져올 수없는 이유를 모르겠습니다. DriveId가 파일이나 폴더를 나타내는 경우 어떤 차이가있을 수 있습니다.

는 그래서이 질문에 종기 :

  1. 나 파일 또는 폴더로 DriveId을 식별 할 수 있습니다 몇 가지 방법/표시가 있습니까?
  2. getFile()/getFolder()를 통해 가지 않고도 부모 목록을 얻을 수있는 방법에 대해 모르겠습니까?

답변

1

내가보고 행복을 그 GDAA의 진화 방법

DriveId.getResourceType()

직접 Drive 개체의 유형을 검색 할 수 있도록 도입되었다.

/** 
* FOLDER type object inquiry 
* @param driveId Drive ID 
* @return TRUE if FOLDER, FALSE otherwise 
*/ 
static boolean isFolder(DriveId driveId) { 
    return driveId != null && driveId.getResourceType() == DriveId.RESOURCE_TYPE_FOLDER; 
} 

/** 
* FILE type object inquiry 
* @param driveId Drive ID 
* @return TRUE if FILE, FALSE otherwise 
*/ 
static boolean isFile(DriveId driveId) { 
    return driveId != null && driveId.getResourceType() == DriveId.RESOURCE_TYPE_FILE; 
} 
0

다음 방법을 사용해 보셨나요? Drive.DriveApi.query (googleApiClient, query);

파일 부모에 액세스하려면 적절한 쿼리를 만들어야합니다. 이 솔루션에 대한 좋은 점은 FileId 또는 FolderId 대신 DriveId를 사용한다는 것입니다.

Query query = new Query.Builder() 
    .addFilter(Filters.eq(SearchableField.PARENTS, "DriveId")) 
    .build(); 
Drive.DriveApi.query(googleApiClient, query); 

당신은 다음 페이지에서이 솔루션에 대한 자세한 내용을보실 수 있습니다 :이 솔루션은 비슷한해야 https://developers.google.com/drive/android/queries

+0

"사용자의 부모 DriveId가 'DriveId : AbC ...'"인 개체를 찾으십시오. 나는 "DriveId : XyZ ..."라는 객체의 모든 부모를 찾는 방법을 묻습니다. Google 드라이브 개체 (파일/폴더)에는 여러 개의 부모가있을 수 있습니다. – seanpj

+0

DriveAPI 설명서에 따르면 요청한 결과가 표시됩니다. 드라이브 웹 API에서 이러한 메소드가 존재합니다. https://developers.google.com/drive/v2/reference/parents/list – Rivero

+0

Android API의 Query 메소드를 사용하면 비슷한 응답을 얻을 수 있습니다. – Rivero