2016-09-29 1 views
1

私はGoogleドライブを開いており、ファイルを選択できます。確認ボタンをクリックすると応答があり、InputStreamに電話してファイルを読み始めます。これは私のコードInputStreamを読んでいた。アプリケーションがdriveContent.InputStream.Lengthに達したときGoogleドライブ:Xamarin - Android GetInputStream - コンテンツインスタンスごとに1回のみ呼び出すことができます

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); 
       } 

      }); 

、ブレークポイントはInputStreamが唯一のコンテンツのインスタンスごとに一度呼び出すことができることを私に示しました。コードでは、その行が入力ストリームの最初の呼び出しです。

答えて

0

エラーが示すように、毎回driveContent.InputStreamを呼び出す代わりに、inputという名前の変数を作成し、driveContent.InputStreamを割り当て、次にinputを使用してバイトの読み込み、長さの取得などのメソッドを取得します。

var input = driveContent.InputStream 

、その後

var length = input.Length; 

input.Read(data, 0, data.Length); 
と交換
関連する問題