2015-01-09 2 views
1

Я пытаюсь создать одно примерное приложение в Xamarin/Android, которое загружает одно изображение из Интернета и отображает его в ImageView. Но вскоре после выполнения var imageContent = await httpClient.GetByteArrayAsync (ImageUrl); пользовательский интерфейс/приложение зависает. Реакция обратного вызова не поступает. Я добавляю свой полный исходный код для справки. Пожалуйста, помогите, что неправильно в моей выборке.HttpClient не работает в Xamarin/Android App

[Activity (Label = "ImageDownloadSample", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity 
{ 
    private const string ImageUrl = "http://www.olympusimage.com.sg/content/000006422.jpg"; 
    private ImageView imgView; 
    protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 
     SetContentView (Resource.Layout.Main); 


     var button = FindViewById<Button> (Resource.Id.downloadImage); 
     imgView = FindViewById<ImageView>(Resource.Id.imageView); 
     button.Click+=((sender, e) => 
      DownloadImageAsync()); 

    } 

    private async void DownloadImageAsync() 
    { 
      var httpClient = new HttpClient(); 
      imgView.SetImageResource (Android.Resource.Drawable.IcMenuGallery); 

      var imageContent = await httpClient.GetByteArrayAsync (ImageUrl); 
      var documentsPath = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); 
      string localFilename = "mytestImage.jpg"; 
      string localPath = System.IO.Path.Combine (documentsPath, localFilename); 
      File.WriteAllBytes (localPath, imageContent); 


      var localImage = new Java.IO.File (localFilename); 
      if (localImage.Exists()) { 

       var bitmapImage = BitmapFactory.DecodeFile (localImage.AbsolutePath); 
       imgView.SetImageBitmap (bitmapImage); 


     } 

    } 
} 

}

Пожалуйста, помогите

ответ

0

Они имеют пример приложения, который делает именно это: https://github.com/xamarin/monodroid-samples/blob/master/AsyncImageAndroid/AsyncImageAndroid/MainActivity.cs

Кроме того, что изображение, которое вы пытаетесь загрузить выглядит довольно огромный ... Я «Конечно, вы получите что-то более разумное, чтобы просто ошибиться, пытаясь заставить все работать.

+0

Этот образец реализован с помощью WebClient. Я пытался с последним HttpClient. Почему мне нужно придерживаться старого метода ... ?? – StezPet

+0

Возможно, вы этого не сделаете. Можете ли вы обновить вопрос, чтобы точно сказать, на какой строке висит ваше приложение? Есть ли что-нибудь написанное на консоли? –

+0

Вы также должны использовать меньшее изображение. Я не думаю, что вы должны загружать 8 МБ изображения в мобильное приложение. –

-1

Вы, возможно, потребуется создать обработчик событий, как, например:

button.Click+=(async (sender, e) => DownloadImageAsync()); 

Чтобы указать, что он содержит код, который может работать асинхронно

+0

Его ошибка в соглашении об именах ... Этот код больше не ждет. – StezPet

0

У меня такая же проблема. Проверьте исключение! Если у вас установлен тайм-аут HttpClient.Timeout больше!

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