Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# xamarin通用图像加载器,无需查看_C#_Android_Xamarin_Universal Image Loader - Fatal编程技术网

C# xamarin通用图像加载器,无需查看

C# xamarin通用图像加载器,无需查看,c#,android,xamarin,universal-image-loader,C#,Android,Xamarin,Universal Image Loader,我正在尝试使用xamarin中的universal image loader将图像加载到变量中。但是,它总是返回null。我试过几种方法,但似乎没有一种能奏效。这是我的密码。唯一一个在非通用映像加载程序中工作的映像加载程序 private async void GetImages(CardsAdapter adapter, List<Card> cards) { WebClient client = new WebClient();

我正在尝试使用xamarin中的universal image loader将图像加载到变量中。但是,它总是返回null。我试过几种方法,但似乎没有一种能奏效。这是我的密码。唯一一个在非通用映像加载程序中工作的映像加载程序

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;
        }
private async void GetImages(卡片适配器、列表卡)
{
WebClient客户端=新的WebClient();
foreach(卡片中的var卡片)
{
//var data=wait client.downloaddatatasksync(card.imageUrl);
//card.image=新的BitmapDrawable(BitmapFactory.DecodeByteArray(数据,0,数据.长度));
//card.image=ImageService.AsBitmapDrawableAsync();
//ImageLoader ImageLoader=ImageLoader.Instance;
//位图bm=imageLoader.LoadImageSync(card.imageUrl);
var bm=等待加载映像(卡);
card.image=新的位图可绘制(bm);
adapter.NotifyDataSetChanged();
}
}
专用异步任务LoadImage(卡)
{
ImageLoader ImageLoader=ImageLoader.Instance;
位图bm=imageLoader.LoadImageSync(card.imageUrl);
//LoadImage(card.imageUrl,新的SimpleMapgeLoadingListener());
//位图bm=null;
//imageLoader.LoadImage(
//card.imageUrl,
//新ImageLoadingListener(
//加载完成:(图像URI、视图、加载图像)=>{
////使用位图可以执行任何操作
//bm=加载图像;
//        }));
返回bm;
}
谢谢你的帮助

问候,


Bjorn

在对代码进行多次测试后,您的代码运行了
android.os.NetworkOnMainThreadException
异常或
ImageLoader必须是init配置,然后才能使用我身边的
错误。第一个异常没有使程序停止,但它被抛出到日志中。也许这就是你的
位图
全部为空的原因

您可以尝试以下代码:

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)
    {
    }
}
此代码由我编写,如果仍然不起作用,请确保您已启用
Internet
功能,并且您的图像URL正确无误