如何使用Google Drive Android Api创建Google云端硬盘电子表格

时间:2014-07-21 22:12:28

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

我正在创建一个应用,用户可以从列表视图中选择项目,然后我想发送该数据并创建包含该数据的新Google云端硬盘电子表格。这是我第一次使用API​​,我真的不知道我在做什么。我已经按照他们在GitHub上的演示教程,我能够创建一个屏幕,用户可以在其中选择驱动器中的文件夹来发送数据,但我不知道如何发送数据。在这种方法中:

final ResultCallback<ContentsResult> contentsCallback = new ResultCallback<ContentsResult>() {
        @Override
        public void onResult(ContentsResult result) {
            MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder()
                    .setMimeType("text/html").build();
            IntentSender intentSender = Drive.DriveApi
                    .newCreateFileActivityBuilder()
                    .setInitialMetadata(metadataChangeSet)
                    .setInitialContents(result.getContents())
                    .build(getGoogleApiClient());
            try {
                startIntentSenderForResult(
                        intentSender, REQUEST_CODE_CREATOR, null, 0, 0, 0);
            } catch (SendIntentException e) {
                Log.w(TAG, "Unable to send intent", e);
            }
        }
    };

我是否已将元数据设置为我要发送的数据?我基本上希望能够访问电子表格的某些表格和行和列,但我还没有找到办法。我真的很困惑。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

Google Drive Android API对电子表格,图片,文字等一无所知......它处理的是具有元数据的对象,这些对象指定了对象(文件,文件夹)的外观和内容。从外部。元数据指定其标题,描述,已加星标的状态,所有权,与父母的关系等.... 它还有内容,您可以将其写入或读取为byte []缓冲区。如果你编写电子表格,jpeg图像或其他什么,API也不会知道它。

以下是一些代码片段(&#39;等待&#39;味道使其看起来很简单):

GoogleApiClient _gac;
...
// parentEID - parent Encoded DriveID ("root" for root, "appfolder" for appfolder)
// name - file name
// mime - mime type
// buf - data to write 
void create(String parentEID, String name, String mime, byte[] buf) {
  try {
    DriveFolder pFld = getFldr(pEID);
    if (pFld != null) {
      MetadataChangeSet.Builder bldr = 
                               new MetadataChangeSet.Builder().setTitle(name).setMimeType(mime);
      MetadataChangeSet meta = bldr.build();
      ContentsResult ctR0 = Drive.DriveApi.newContents(_gac).await();
      if ((ctR0 != null) && (ctR0.getStatus().isSuccess())) {
        DriveFileResult dfRt = pFld.createFile(_gac, meta, ctR0.getContents()).await();
        DriveFile dFil = (dfRt != null) && dfRt.getStatus().isSuccess() ? 
                                                            dfRt.getDriveFile() : null;
        if (dFil != null) {
          ContentsResult ctR1 = dFil.openContents(_gac, DriveFile.MODE_WRITE_ONLY, null)
                                                                                  .await();
           if ((ctR1 != null ) && (ctR1.getStatus().isSuccess())) {
             ctR1.getContents().getOutputStream().write(buf);
             Status stts = dFil.commitAndCloseContents(_gac, ctR1.getContents()).await();
             if ((stts != null) && stts.isSuccess()) {
               MetadataResult mdRt = dFil.getMetadata(_gac).await();
               if ((mdRt != null) && mdRt.getStatus().isSuccess())
                 Metadata md = mdRt.getMetadata();
             }
           }
        }
      }
    }
  } catch (Exception e) {}
}
// eid - Endoded ID produced by DriveId..encodeToString() 
DriveFolder getFldr(String eid) {
  DriveFolder dFld = null;
  if (eid != null ) try {
    if (eid.equals("root")) {
      dFld = Drive.DriveApi.getRootFolder(_gac);
    } else if (eid.equals("appfolder")) {
      dFld = Drive.DriveApi.getAppFolder(_gac);
    } else {  
      dFld = Drive.DriveApi.getFolder(_gac, DriveId.decodeFromString(eid)) ;
    }
  } catch (Exception e) {}   
  return dFld;
}

因此,您调用此方法,指定它的位置(父ID),文件名,其mime类型和二进制内容。该文件将显示在Google云端硬盘中(如果您通过授权手册 - 但这是另一个故事)。顺便说一句,我假设您正在谈论Android应用,对吗? 祝你好运