首先,我看到这些导入的事实:
import com.google.api.client.http.FileContent;
...
import com.google.api.services.drive.Drive;
表明您正在混合GDAA和RESTAPI。除非您想进入,否则不要这样做trouble.
因此,当您获得FolderId时,我认为它是“DB”文件的父级(如果DB文件是SQLite类型,则您的MIME类型应该是“application/x-sqlite3”)。
无论如何,在 GDAA 中,您首先必须将 java.io.File (代表“DB”)转换为content。并且你必须提供metadata(如文件标题、mime 类型、标志...)。您的元数据是正确的,这就是您绊倒的内容。以下代码片段应该可以满足您的需要(不要让我负责,我在 5 分钟内将其拼凑在一起 - 没有测试)
/******************************************************************
* create file in GOODrive
* @param pFldr parent's ID
* @param titl file name
* @param mime file mime type (application/x-sqlite3)
* @param file file (with content) to create
*/
static void saveToDrive(final DriveFolder pFldr, final String titl,
final String mime, final java.io.File file) {
if (getGoogleApiClient() != null && pFldr != null && titl != null && mime != null && file != null) try {
// create content from file
Drive.DriveApi.newDriveContents(getGoogleApiClient()).setResultCallback(new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult driveContentsResult) {
DriveContents cont = driveContentsResult != null && driveContentsResult.getStatus().isSuccess() ?
driveContentsResult.getDriveContents() : null;
// write file to content, chunk by chunk
if (cont != null) try {
OutputStream oos = cont.getOutputStream();
if (oos != null) try {
InputStream is = new FileInputStream(file);
byte[] buf = new byte[4096];
int c;
while ((c = is.read(buf, 0, buf.length)) > 0) {
oos.write(buf, 0, c);
oos.flush();
}
}
finally { oos.close();}
// content's COOL, create metadata
MetadataChangeSet meta = new Builder().setTitle(titl).setMimeType(mime).build();
// now create file on GooDrive
pFldr.createFile(getGoogleApiClient(), meta, cont).setResultCallback(new ResultCallback<DriveFileResult>() {
@Override
public void onResult(DriveFileResult driveFileResult) {
if (driveFileResult != null && driveFileResult.getStatus().isSuccess()) {
// BINGO
} else {
// report error
}
}
});
} catch (Exception e) { e.printStackTrace(); }
}
});
} catch (Exception e) { e.printStackTrace(); }
}
我注意到,你正在改编“官方”GDAA 演示为您的项目。如果还不够或者压倒性的,你也可以看看这个demo,对同一问题采取不同的方法。
祝你好运