我正在使用Xamarin和MVVM开发iOS和Android应用程序。应用程序应该从服务器上传/下载文件。具体来说,Android上有一个按钮,点击它,Android文件选择器打开,我得到文件。iOS也是如此。问题是,我试图将文件发送到viewmodel作为流,但在Android是作为Android.Runtime.InputStreamInvoker
和在iOS是作为NSData
。是否有任何通用的方式发送文件的流到视图模型或任何铸造?而cast到Stream不起作用,当我发送它不是viewmodel时,我不能从Stream获得任何信息。也许有人有这样的问题。
public override void OnActivityResult(int requestCode, int resultCode, Intent intent)
{
base.OnActivityResult(requestCode, resultCode, intent);
if (resultCode == (int)Result.Ok)
{
var returnUri = intent.Data;
var mimeType = _baseActivity.ContentResolver.GetType(returnUri);
var returnCursor =
_baseActivity.ContentResolver.Query(returnUri, null, null, null, null);
int nameIndex = returnCursor.GetColumnIndex(OpenableColumns.DisplayName);
int sizeIndex = returnCursor.GetColumnIndex(OpenableColumns.Size);
returnCursor.MoveToFirst();
var name = returnCursor.GetString(nameIndex);
var size = returnCursor.GetLong(sizeIndex);
var inputStream = (Android.Runtime.InputStreamInvoker) _baseActivity.ContentResolver.OpenInputStream(returnUri);
var count = inputStream.BaseInputStream.Available();
//then I want to send inputStrea here what to do next??
}
}
我知道我可以读取整个文件并将其复制到例如MemoryStream
并发送,但它很慢而且不好,我正在寻找一种不制作副本的方法。
有时在这种情况下,我将只是键入属性为System.Object
。绑定系统在运行时使用反射来访问属性,所以你的属性使用什么具体类型并不重要。
这假设无论连接到视图模型的是什么,都可以在该平台上获得NSData(在iOS上)或Android等效的NSData。