5

SO 22295903で説明されている削除、ゴミ箱機能のテスト中に、この問題に遭遇しました。

1/ コンテンツを含むファイルを作成する

GoogleApiClient _gac;
DriveFile createFileWait(DriveFolder fldr, String name, String mime, byte[] buff) {
  DriveFile drvFile = null;
  try { 
    ContentsResult rslt = Drive.DriveApi.newContents(_gac).await();
    if (rslt.getStatus().isSuccess()) {
      Contents cont = rslt.getContents();    
      cont.getOutputStream().write(buff);
      MetadataChangeSet meta = (mime == null) ?
          new MetadataChangeSet.Builder().setTitle(name).build() :
          new MetadataChangeSet.Builder().setTitle(name).setMimeType(mime).build();
      drvFile = fldr.createFile(_gac, meta, cont).await().getDriveFile();
    }
  } catch (Exception e) {}
  return drvFile;
}

2/クエリを使用してファイルを取得します(タイトルです):

ArrayList<DriveId> findAll(String title, String mime, DriveFolder fldr) {
  ArrayList<DriveId> dIDs = null;
  if (isConnected()) try {
    ArrayList<Filter> fltrs = new ArrayList<Filter>();
    fltrs.add(Filters.eq(SearchableField.TRASHED, false));
    if (title != null)  fltrs.add(Filters.eq(SearchableField.TITLE, title));
    if (mime  != null)  fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime));
    Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build(); 
    MetadataBufferResult rslt = (fldr == null) ? Drive.DriveApi.query(_gac, qry).await() : 
                                                   fldr.queryChildren(_gac, qry).await();
    if (rslt.getStatus().isSuccess()) {
      MetadataBuffer mdb = null;
      try { 
        mdb = rslt.getMetadataBuffer();
        if (mdb == null) return null;
        dIDs = new ArrayList<DriveId>();
        for (Metadata md : mdb) {
          if ((md == null) || md.isTrashed()) continue; 
          dIDs.add(md.getDriveId());
        }
      } finally { if (mdb != null) mdb.close(); } 
    }
  } catch (Exception e) {}
  return dIDs;
}

3/ 有効な DriveId を取得します。これを使用して、RESTful API などで使用するリソース ID を取得してみてください。

String fileID = drvId.getResourceId();

null値を取得します。しばらくして (ランダムで指定が難しい)、クエリを繰り返すと、最終的にリソース ID が取得されます。理由はわかっていますが、おそらく遅延の問題です。Google サポート チームからのコメントをお待ちしています。コントロールを得る方法はありますか?クエリのレイテンシ ステータス?

4

1 に答える 1

2

これは、変更が最初にローカルに永続化され、十分なネットワーク接続が確保された後で (おそらく) サーバーにアップロードされるために発生します。残念ながら、リソース ID は、新しく作成されたファイルがサーバーにコミットされるまで利用できません。

現在できることは、利用可能になるのを待つことだけです。このフローを簡単にするいくつかの追加に取り組んでいるので、しばらくお待ちください。

于 2014-03-17T19:14:09.463 に答える