如何使用Google Drive Android Api创建Google Drive电子表格
我正在创建一个应用程序,用户可以从列表视图中选择项目,我想发送这些数据并创建一个新的GoogleDrive电子表格,其中包含这些数据。这是我第一次使用API,我真的不知道我在做什么。我遵循了GitHub上的演示教程,我能够创建一个屏幕,用户可以在其中选择驱动器中的文件夹来发送数据,但我不知道如何准确地发送数据。在这种方法中:如何使用Google Drive Android Api创建Google Drive电子表格,android,google-spreadsheet-api,google-drive-android-api,Android,Google Spreadsheet Api,Google Drive Android Api,我正在创建一个应用程序,用户可以从列表视图中选择项目,我想发送这些数据并创建一个新的GoogleDrive电子表格,其中包含这些数据。这是我第一次使用API,我真的不知道我在做什么。我遵循了GitHub上的演示教程,我能够创建一个屏幕,用户可以在其中选择驱动器中的文件夹来发送数据,但我不知道如何准确地发送数据。在这种方法中: final ResultCallback<ContentsResult> contentsCallback = new ResultCallback<Co
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);
}
}
};
final ResultCallback contentsCallback=new ResultCallback(){
@凌驾
public void onResult(ContentsResult result){
MetadataChangeSet MetadataChangeSet=新建MetadataChangeSet.Builder()
.setMimeType(“text/html”).build();
IntentSender IntentSender=Drive.DriveApi
.newCreateFileActivityBuilder()
.setInitialMetadata(metadataChangeSet)
.setInitialContents(result.getContents())
.build(getGoogleAppClient());
试一试{
startinentsenderforresult(
intentSender,请求\代码\创建者,null,0,0,0);
}捕获(发送){
Log.w(标签“无法发送意图”,e);
}
}
};
我是否已将元数据设置为要发送的数据?我基本上希望能够访问电子表格的某些表格、行和列,但我还没有找到一种方法。我真的很困惑。非常感谢您的帮助。Google Drive Android API对电子表格、图像、文本……一无所知,。。。它处理具有元数据的对象,元数据指定对象(文件、文件夹)从外部“看”的内容。元数据指定其标题、描述、星级状态、所有权、与父级的关系等。。。。 它还有内容,可以作为字节[]缓冲区写入或读取。如果您编写电子表格、jpeg图像或其他内容,API对此一无所知 下面是一段代码片段以提供帮助(“等待”使其看起来简单): 因此,调用此方法,指定它的位置(父ID)、文件名、mime类型和二进制内容。该文件将显示在谷歌硬盘中(如果你通过了授权挑战-但这是另一个故事)。顺便说一句,我想你说的是Android应用,对吧?
祝你好运是的,我说的是安卓。如何指定数据进入的行/列?正如我所说,您可以将整个对象(电子表格)从应用程序复制到Google Drive。上面的“byte[]buf”变量将包含电子表格。Google Drive Android API不处理行/列等电子表格细节。好吧,你的意思是我可以在
byte[]buf
变量中设置电子表格数据,但是没有办法处理电子表格的细节?因此,我无法将数据放入特定的行/列中?可能有一种方法可以在Android()上处理电子表格,但它与Google Drive API无关。此API仅处理驱动器对象的创建和操作。我试图帮助解决驱动器上传问题,但对电子表格API一无所知。
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;
}