无法覆盖Google Drive AppData文件夹中的文件INTERNAL_ERROR
问题描述:
我在我的应用程序中使用GDAA
来管理我在谷歌驱动器中的应用程序文件。所有下面列出的操作精细的工作就像无法覆盖Google Drive AppData文件夹中的文件INTERNAL_ERROR
- 谷歌从
AppData Folder
- 上传文件到
AppData Folder
- 删除文件
- 下载文件从
AppData Folder
,但是当我尝试覆盖文件中AppData Folder
我是得到出现错误在onResult()
回调中。
Status Message : Failed to commit changes.
Status Code : INTERNAL_ERROR (8)
我无法理解为什么会发生这种情况。请在下面找到我的代码以供参考
public void overwrite(String strLocalFilePath, String strDriveId, String strGoogleDriveFileMimeType, String strGoogleDriveFileTitle){
final DriveId driveId = DriveId.decodeFromString(strDriveId);
DriveFile file = driveId.asDriveFile();
file.open(mGoogleApiClient, DriveFile.MODE_WRITE_ONLY, null).setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(DriveApi.DriveContentsResult result) {
if (!result.getStatus().isSuccess()) {
Log.e(TAG,"Error");
return;
}
DriveContents driveContents = result.getDriveContents();
OutputStream outputStream = driveContents.getOutputStream();
boolean isSuccess = writeFileToStream(outputStream, strLocalFilePath);
if (isSuccess) {
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle(strGoogleDriveFileTitle)
.setMimeType(strGoogleDriveFileMimeType)
.build();
ExecutionOptions executionOptions = new ExecutionOptions.Builder()
.setNotifyOnCompletion(true)
.setTrackingTag("SAMPLE_TRACKING_TAG")
.build();
driveContents.commit(mGoogleApiClient, changeSet, executionOptions).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
// Handle the response status
if (!status.getStatus().isSuccess()) {
Log.e(TAG, "Error while trying to overwrite file. Message : "+status.getStatus().getStatusMessage() + " Status code : "+status.getStatus().getStatusCode());
return;
}else{
Log.d(TAG,"File overwritten successfully!!");
}
}
});
} else {
Log.e(TAG, "File I/O Error occurred : "+ strGoogleDriveFileTitle);
}
}
});
}
private boolean writeFileToStream (OutputStream oos, String filePath){
if (oos != null) {
InputStream is = null;
try {
Log.d(TAG, "Started writing file : "+filePath);
is = new FileInputStream(filePath);
byte[] buf = new byte[4096];
int c;
while ((c = is.read(buf, 0, buf.length)) > 0) {
oos.write(buf, 0, c);
oos.flush();
}
Log.d(TAG, "Finished writing file : "+filePath);
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
try {
if(oos != null) {
oos.close();
}
if(is != null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}
return false;
}
答
根据这一thread,如果你得到错误代码为8(INTERNAL_ERROR),请仔细检查你的应用程序中的注册开发者控制台。请注意,每个注册的Android客户端都由(包名称,Android签名证书SHA-1)对唯一标识。如果您的调试和生产环境中有多个软件包名称/签名证书,请确保注册每对软件包。
验证:
- 打开Credentials page和选择项目
- 确保每对有的Android类型的OAuth 2.0客户端ID。 要为您的Android客户端创建一个新的OAuth 2.0客户端ID,选择新凭证 - 从下拉>OAuth2用户端编号,选择Android和输入你的包名称/签名证书指纹那里。
为了让您的签名密钥证书SHA-1:关键
标准调试关键
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
其他(自定义)
keytool -list -v -keystore $YOUR_KEYSTORE_LOCATION
这里有一个REF erence这也可能有助于:
如果你连1之后得到这个错误)确保您已注册,其相应的证书指纹的包名,和2) (重新)使用一个已经存在的项目,那么你应该检查这个项目是否有一个产品名称和一个电子邮件地址(仔细检查一下),它们都可以在“同意屏幕”部分找到。