【问题标题】:Google Drive Android API onChildrenRetrievedCallbackGoogle Drive Android API onChildrenRetrievedCallback
【发布时间】:2015-08-15 07:02:39
【问题描述】:

我正在构建一个应用程序并尝试查看存储在应用程序内共享 Google 云端硬盘文件夹中的 PDF。我已经连接到 Drive,并且已经设置了 GoogleApiClient。现在我正在查询数据库并尝试处理结果,但是这段代码遇到了问题:

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 包,但我不确定这里还能做什么。有什么帮助吗?

【问题讨论】:

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


    【解决方案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
            }
          }
        });
      }
    

    您的 mimeType 过滤器看起来也不正确。我建议跳过 mimeType 过滤器,仅按名称(标题)搜索并仔细检查您获得的 mime 类型(上面代码中的 md.getMimeType() )。

    当心!文件名/标题在 GooDrive 世界中不是唯一标识符

    再小心一点!如果 t 不是由您的 Android 应用创建的,您将看不到该文件(请参阅 GDAA 支持的 SCOPES)。

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多