2017-05-22 5 views
0

Je suis en train de charger une image dans une variable en utilisant le chargeur d'image universel dans Xamarin. Cependant, il retourne toujours null. J'ai essayé plusieurs méthodes mais aucune ne semble faire le travail. c'est mon code. le seul qui fonctionne dans le chargeur universel d'image non.chargeur d'image universel xamarin sans le mettre en vue

private async void GetImages(CardsAdapter adapter, List<Card> cards) 
     { 
      WebClient client = new WebClient(); 

      foreach (var card in cards) 
      { 
       //var data = await client.DownloadDataTaskAsync(card.imageUrl); 
       //card.image = new BitmapDrawable(BitmapFactory.DecodeByteArray(data, 0, data.Length)); 
       //card.image = ImageService.AsBitmapDrawableAsync(); 
       //ImageLoader imageLoader = ImageLoader.Instance; 
       //Bitmap bm = imageLoader.LoadImageSync(card.imageUrl); 
       var bm = await LoadImage(card); 
       card.image = new BitmapDrawable(bm); 
       adapter.NotifyDataSetChanged(); 
      } 
     } 

     private async Task<Bitmap> LoadImage(Card card) 
     { 
      ImageLoader imageLoader = ImageLoader.Instance; 
      Bitmap bm = imageLoader.LoadImageSync(card.imageUrl); 
      //imageLoader.LoadImage(card.imageUrl, new SimpleImageLoadingListener()); 
      //Bitmap bm = null; 
      //imageLoader.LoadImage(
      // card.imageUrl, 
      // new ImageLoadingListener(
      //  loadingComplete: (imageUri, view, loadedImage) => { 
      //   // Do whatever you want with Bitmap 
      //   bm = loadedImage; 
      //  })); 
      return bm; 
     } 

merci pour votre aide!

salutations,

Bjorn

Répondre

0

Après plusieurs tests de votre code, votre code a manqué l'exception android.os.NetworkOnMainThreadException ou ImageLoader must be init with configuration before using erreur de mon côté. La première exception n'a pas fait s'arrêter le programme mais il est jeté dans le journal. Peut-être que c'est la raison pour laquelle vos Bitmap obtiennent tous null.

Vous pouvez essayer ce code:

public class MainActivity : Activity, IImageLoadingListener 
{ 
    //Your ListView and Adapter 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 

     // Set your ListView and Adapter here 

     ImageLoader imageloader = ImageLoader.Instance; 
     imageloader.Init(ImageLoaderConfiguration.CreateDefault(this)); 

     foreach (var card in cards) 
     {   
      imageloader.LoadImage(card.imageUrl, this); 
     }    
    } 

    public void OnLoadingCancelled(string p0, View p1) 
    { 
    } 

    public void OnLoadingComplete(string p0, View p1, Bitmap p2) 
    { 
     foreach (var card in cards) 
     { 
      if (card.imageUrl == p0) 
      { 
       card.image = p2; 
       adapter.NotifyDataSetChanged(); 
      }    
     } 
    } 

    public void OnLoadingFailed(string p0, View p1, FailReason p2) 
    { 
    } 

    public void OnLoadingStarted(string p0, View p1) 
    { 
    } 
} 

Ce code fonctionne par moi, si ne fonctionne toujours pas, s'il vous plaît vous assurer que vous avez activé la capacité Internet et vos urls d'image sont corrects.