2016-06-27 19 views
1

私は、XamarinとMVVMを使って、iOSとAndroid用のアプリケーションを開発しています。アプリケーションはサーバーからファイルをダウンロードする必要があります。詳細には、Android上にボタンがあり、クリックするとAndroidファイルピッカーが開き、ファイルを取得しています。 iOSでも同じです。問題は、ストリームとしてviewmodelにファイルを送信しようとしていることですが、AndroidではAndroid.Runtime.InputStreamInvoker、iOSではNSDataとなります。ファイルのストリームをビューモデルやその他のキャストに送信する普遍的な方法はありますか?ストリームへのキャストは機能しません。送信するとビューモデルではなく、ストリームから情報を取得できません。多分誰もそのような問題を抱えていました。Xamarin MVVMがファイルを操作する

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のためにそれをコピーして送ることができることを知っているが、それは非常に遅く、よくないです、私は探しています:例として

、Android上でファイルを受信コピーを作成しない方法の場合

答えて

0

このような場合は、単にプロパティーをSystem.Objectと入力するだけです。バインディングシステムは、リフレクションを使用して実行時にプロパティにアクセスします。したがって、プロパティがどのような具体的なタイプを使用しているかは実際問題ではありません。

これは、あなたのビューモデルに接続されているものは、そのプラットフォーム上にあるNSData(iOSの場合)またはAndroidの同等物を取得することで問題なく動作すると仮定しています。

関連する問題