将文件从Android上传到Google云端硬盘失败。似乎createFile
即使返回的状态成功也无法正常工作。我从Google API获得的实际状态错误代码和消息是错误代码8,错误消息:提供的DriveId无效
我也无法在相关用户的Google云端硬盘上找到该文件(使用Google云端硬盘的网页界面)。
我也尝试在创建文件回调中使用Drive.DriveApi.fetchDriveId(m_api, m_file.getDriveId().toString())
(而不是调用openContents
),它也失败了。
相关代码如下,任何帮助将不胜感激!
public void createFile() {
Drive.DriveApi.newContents(m_api).setResultCallback(contentsCallback);
}
final private ResultCallback<ContentsResult> contentsCallback = new ResultCallback<ContentsResult>() {
@Override
public void onResult(ContentsResult result) {
if (handleError(result.getStatus())) {
return;
}
Contents contents = result.getContents();
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("aaab").setMimeType("text/plain")
.setStarred(true).build();
// create a file on root folder
Drive.DriveApi.getRootFolder(m_api)
.createFile(m_api, changeSet, contents)
.setResultCallback(fileCallback);
}
};
final private ResultCallback<DriveFileResult> fileCallback = new ResultCallback<DriveFileResult>() {
@Override
public void onResult(DriveFileResult result) {
if (handleError(result.getStatus())) {
return;
}
m_file = result.getDriveFile();
m_file.openContents(m_api, DriveFile.MODE_READ_ONLY, null)
.setResultCallback(updateCallback);
}
};
final private ResultCallback<ContentsResult> updateCallback = new ResultCallback<ContentsResult>() {
@Override
public void onResult(ContentsResult result) {
// Getting error here
if (handleError(result.getStatus())) {
return;
}
...
答案 0 :(得分:0)
好的问题是没有创建新文件。 用于在GoogleDrive上创建新文件我使用此代码并且工作正常,问题出在您的googleapiclient中,或者我不知道您在何处以及如何调用您的函数createFile()。您必须调用onConnected metode。
@Override
public void onConnected(Bundle connectionHint) {
super.onConnected(connectionHint);
// create new contents resource
Drive.DriveApi.newContents(m_api)
.setResultCallback(contentsCallback);
}
final private ResultCallback<ContentsResult> contentsCallback = new
ResultCallback<ContentsResult>() {
@Override
public void onResult(ContentsResult result) {
if (!result.getStatus().isSuccess()) {
showMessage("Error while trying to create new file contents");
return;
}
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("New file")
.setMimeType("text/plain")
.setStarred(true).build();
// create a file on root folder
Drive.DriveApi.getRootFolder(m_api)
.createFile(m_api, changeSet, result.getContents())
.setResultCallback(fileCallback);
}
};
final private ResultCallback<DriveFileResult> fileCallback = new
ResultCallback<DriveFileResult>() {
@Override
public void onResult(DriveFileResult result) {
if (!result.getStatus().isSuccess()) {
showMessage("Error while trying to create the file");
return;
}
showMessage("Created a file: " + result.getDriveFile().getDriveId());
}
};
答案 1 :(得分:0)
我修好了! 它有两个问题:
第一个问题是我的错 - 我的Android清单缺少驱动服务的APP_ID:
<meta-data
android:name="com.google.android.apps.drive.APP_ID"
android:value="@string/app_id" />
其次,该活动正在扩展预定义的Google类:BaseGameActivity。 但是这个类假设我没有使用谷歌驱动器文件。为了使它工作,我不得不在我的活动中添加它:
mRequestedClients = GameHelper.CLIENT_ALL;
并更改Google预定义代码。实际上它看起来像谷歌的一个错误,假设总是使用谷歌APP文件夹,而不是谷歌驱动器文件。在GameHelper.java,第298行,来自:
builder.addScope(Drive.SCOPE_APPFOLDER);
到:
builder.addScope(Drive.SCOPE_FILE);