2016-06-27 3 views
1

Я разрабатываю приложение для iOS и Android с использованием Xamarin и MVVM. Приложение должно загружать \ загружать файлы на сервер \ с сервера. В деталях, есть кнопка на Android, нажмите на нее, откроется сборщик файлов Android, и я получаю файл. То же самое в iOS. Проблема в том, что я пытаюсь отправить файл в viewmodel как Stream, но в Android он равен Android.Runtime.InputStreamInvoker, а в iOS - NSData. Есть ли универсальный способ для отправки потока файла в viewmodel или что-то отличное? И кастинг для Stream не работает, когда я отправляю его не viewmodel, я не могу получить информацию из потока. Может быть, у кого-то была такая проблема.Xamarin MVVM, работающий с файлами

В качестве примера, на Android приема файла:

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 и отправить, но это очень медленно и не хорошо, я ищу для метода без копирования.

ответ

0

Иногда в таких случаях я просто напечатаю свойство как System.Object. Система привязки использует отражение для доступа к свойству во время выполнения, поэтому на самом деле не имеет значения, какой конкретный тип использует ваша собственность.

Это предполагает, что все, что подключено к вашей модели просмотра, будет в порядке с получением NSData (когда на iOS) или эквивалентом Android, когда на этой платформе.

Смежные вопросы