2015-08-14 190 views
0

我正在構建應用並嘗試查看存儲在共享Google雲端硬盤文件夾應用內的PDF。我已經連接到雲端硬盤,並且已經建立了GoogleApiClient。現在,我查詢數據庫,並試圖處理結果,但我有這個代碼的麻煩:Google Drive Android API onChildrenRetrievedCallback

Query query = new Query.Builder().addFilter(Filters.and(
         Filters.eq(SearchableField.TITLE, "sample_pdf.pdf"), 
         Filters.eq(SearchableField.MIME_TYPE, "application/vnd.google-apps.file"))) 
       .build(); 
Drive.DriveApi.query(googleApiClient, query) 
     .setResultCallback(new OnChildrenRetrievedCallback() { 

    @Override 
    public void onChildrenRetrieved(MetadataBufferResult result) { 
     // Iterate over the matching Metadata instances in mdResultSet 
    } 
}); 

的Android Studio是無法解決類OnChildrenRetrievedCallback。我已經導入了com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks包,但我不確定此處還有其他要做什麼。任何幫助?

回答

1

試試這個:

/******************************************************************** 
    * find file/folder in GOODrive 
    * @param prnId parent ID (optional), null searches full drive, "root" searches Drive root 
    *    this is a String representation of DriveId (DriveId.encodeToString() 
    * @param titl file/folder name (optional) 
    * @param mime file/folder mime type (optional) 
    * @return  void (arraylist of found objects in callback) 
    */ 
    static void find(String prnId, String titl, String mime) { 

    // add query conditions, build query 
    ArrayList<Filter> fltrs = new ArrayList<>(); 
    if (prnId != null){ 
     fltrs.add(Filters.in(SearchableField.PARENTS, 
     prnId.equalsIgnoreCase("root") ? 
      Drive.DriveApi.getRootFolder(mGAC).getDriveId() : DriveId.decodeFromString(prnId))); 
    } 
    if (titl != null) fltrs.add(Filters.eq(SearchableField.TITLE, titl)); 
    if (mime != null) fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime)); 
    Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build(); 

    // fire the query 
    Drive.DriveApi.query(mGAC, qry).setResultCallback(new ResultCallback<MetadataBufferResult>() { 
     @Override 
     public void onResult(MetadataBufferResult rslt) { 
     if (rslt.getStatus().isSuccess()) { 
      MetadataBuffer mdb = null; 
      try { 
      mdb = rslt.getMetadataBuffer(); 
      for (Metadata md : mdb) { 
       if (md == null || !md.isDataValid() || md.isTrashed()) continue; 
       // collect files 
       DriveId driveId = md.getDriveId(); 
       String dId = driveId.encodeToString(); 
       String mime = md.getMimeType(); 
       //..... 
      } 
      } finally { if (mdb != null) mdb.close(); } // don't know if necessary 
     } 
     } 
    }); 
    } 

你mime類型過濾器不看的權利,無論是。我建議跳過mimeType過濾器,只搜索名稱(標題),然後仔細檢查你得到的mime類型(md.getMimeType())。

請注意!文件名稱/標題並非GooDrive世界中的唯一標識符

還有一點要注意!如果t不是由您的Android應用創建的,您將不會看到該文件(請參閱GDAA支持的SCOPES)。

好運