2016-09-29 8 views
1

У меня открыт диск Google, и файлы можно выбрать. После нажатия кнопки подтверждения у меня появится ответ и позвоните по номеру InputStream и начните читать файл. Это был мой код, который читал InputStream.Google Drive: Xamarin - Android GetInputStream - может быть вызван только один раз на экземпляр контента

var pendingResult = driveFile.OpenAsync(GoogleApiClient, DriveFile.ModeReadOnly, this) 
      .ContinueWith((resultTask) => 
      { 
       var driveContentResults = resultTask.Result; 
       var driveContent = driveContentResults.DriveContents; 

       if (_dialog != null && _dialog.IsShowing) 
        _dialog.Dismiss(); 

       if (driveContentResults.Status.IsSuccess) 
       { 
        if (FileReadyCallback != null) 
        { 
         var length = driveContent.InputStream.Length; 
         //var data = new byte[length]; 
         //driveContent.InputStream.Read(data, 0, data.Length); 
         //FileReadyCallback(this, data); 
        } 
        //var absolutePath = FileUtilities.SaveStreamToDownloadDirectory(driveContent.InputStream, Guid.NewGuid() + ".pdf"); 
        //SendResultToCallingActivity(absolutePath); 
       } 

      }); 

Когда приложение достигло driveContent.InputStream.Length, точка останова показал мне, что InputStream можно назвать только один раз в Content Instance. В коде эта строка является первым вызовом входного потока.

ответ

0

Как говорится в ошибке, вместо вызова driveContent.InputStream каждый раз введите переменную input и назначьте driveContent.InputStream, затем используйте input для чтения байтов, получения длины или других методов.

var input = driveContent.InputStream 

, а затем заменить

var length = input.Length; 

и

input.Read(data, 0, data.Length);