Я загружаю файлы в личное хранилище GoogleDrive. Этот Java-код не выдает никаких предупреждений или ошибок в положительных случаях и работает должным образом.
// [START drive_android_create_file_in_appfolder]
private void createFileInAppFolder() {
final Task<DriveFolder> appFolderTask = getDriveResourceClient().getAppFolder();
final Task<DriveContents> createContentsTask = getDriveResourceClient().createContents();
Tasks.whenAll(appFolderTask, createContentsTask)
.continueWithTask(task -> {
DriveFolder parent = appFolderTask.getResult();
DriveContents contents = createContentsTask.getResult();
OutputStream outputStream = contents.getOutputStream();
try (Writer writer = new OutputStreamWriter(outputStream)) {
writer.write("Hello World!");
}
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("New file")
.setMimeType("text/plain")
.setStarred(true)
.build();
return getDriveResourceClient().createFile(parent, changeSet, contents);
})
.addOnSuccessListener(this,
driveFile -> {
showMessage(getString(R.string.file_created,
driveFile.getDriveId().encodeToString()));
finish();
})
.addOnFailureListener(this, e -> {
Log.e(TAG, "Unable to create file", e);
showMessage(getString(R.string.file_create_error));
finish();
});
}
// [END drive_android_create_file_in_appfolder]
Но я использую kotlin в своем проекте, поэтому скопируйте и вставьте эту функцию в мой код и теперь с небольшим преобразованием:
private fun createFileInAppFolder() {
val appFolderTask = mDriveResourceClient?.appFolder
val createContentsTask = mDriveResourceClient?.createContents()
Tasks.whenAll(appFolderTask, createContentsTask)
.continueWithTask { task ->
val parent = appFolderTask?.result
val contents = createContentsTask?.result
val outputStream = contents!!.outputStream
OutputStreamWriter(outputStream).use { writer -> writer.write(getJSONContent()) }
val changeSet = MetadataChangeSet.Builder()
.setTitle(Constants.BACKUP_FILE_NAME)
.setMimeType(Constants.BACKUP_FILE_MIME_TYPE)
.setStarred(true)
.build()
mDriveResourceClient?.createFile(parent!!, changeSet, contents)
}
.addOnSuccessListener { it ->
Log.e(TAG, "Created file id: ${it.driveId.encodeToString()}")
}.addOnFailureListener { it ->
Log.e(TAG, "Unable to create file: ${it.localizedMessage}")
}
}
Однако в моих журналах постоянно упоминается следующая ошибка, а также, если я загружаю данные, например, например. 3 МБ в GoogleDrive становится около 9-12 МБ:
E/DataBuffer: Internal data leak within a DataBuffer object detected! Be sure to explicitly call release() on all DataBuffer extending objects when you are done with them. (internal object: com.google.android.gms.common.data.DataHolder@7ff040b)
Итак, мой вопрос: как я могу закрыть открытый DataBuffer, который открыт, это мой случай?