Почему OutputStream, возвращаемый функцией DriveContents.getOutputStream(), работает не так, как ожидалось?

Я играл с Google Drive API для Android и наткнулся на небольшую проблему. В частности, меня интересует папка приложений для сохранения и синхронизации данных приложений на разных устройствах. Я могу запросить, существует ли файл с определенным именем в папке приложения. Я могу получить файл через

driveFile = metadata.getDriveId().asDriveFile();

Я могу открыть файл через

driveFile.open( mGoogleApiClient,
                DriveFile.MODE_WRITE_ONLY,
                new DownloadProgressListener() {...} )
.setResultCallback(...);

И в более позднем обратном вызове я могу получить OutputStream с помощью:

OutputStream outputStream = dcr.getDriveContents().getOutputStream();

Но проблема в том, что если я попытаюсь записать в этот OutpustStream, в файл ничего не запишется. Я использовал такой код:

OutputStream outputStream = result.getDriveContents().getOutputStream();
OutputStreamWriter writer = new      OutputStreamWriter(outputStream);
try {
    writer.write("Just some strinh I want to save to Google Drive.");
} catch (IOException e) {
    throw new RuntimeException(e);
}
Status status = dcr.getDriveContents().commit(mGoogleApiClient, null).await();

С помощью этого OutputStream ничего не записывается в GoogleDrive. Но если я использую код из https://developers.google.com/drive/android/files#making_modifications работает как положено.

Скопированный фрагмент этого кода из Google для справки:

try {
    ParcelFileDescriptor parcelFileDescriptor = contents.getParcelFileDescriptor();

    FileOutputStream fileOutputStream = new FileOutputStream(parcelFileDescriptor
        .getFileDescriptor());
    Writer writer = new OutputStreamWriter(fileOutputStream);
    writer.write("hello world");
} catch (IOException e) {
    e.printStackTrace();
}

Почему OutputStream, доступный через DriveContents.getOutputStream(), не работает должным образом? Почему это вообще предусмотрено? Или я что-то упускаю? Версия библиотеки сервисов Google Play — r29.


person Community    schedule 13.02.2017    source источник


Ответы (1)


Закройте OutputStreamWriter — write.close(), чтобы зафиксировать вывод.

person Cheticamp    schedule 23.02.2017