Google云端硬盘:Xamarin - Android GetInputStream - 每个内容实例只能调用一次

时间:2016-09-29 01:23:21

标签: xamarin google-drive-api inputstream drive

我已打开Goog​​le驱动器,文件可供选择。单击确认按钮后,我将收到回复并致电InputStream并开始阅读该文件。这是我的代码,它读取了InputStream

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一次。在代码中,该行是我对输入流的第一次调用。

1 个答案:

答案 0 :(得分:0)

如错误所示,不是每次都调用driveContent.InputStream,而是创建名为input的变量并分配driveContent.InputStream,然后使用input读取字节,获取长度或其他方法。

var input = driveContent.InputStream

然后替换为

var length = input.Length;

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