Xamarin Forms:如果找不到 URL,则默认图像

Posted

技术标签:

【中文标题】Xamarin Forms:如果找不到 URL,则默认图像【英文标题】:Xamarin Forms: Default Image if Url not found 【发布时间】:2016-05-20 04:10:04 【问题描述】:

在 xamarin 表单中,我们可以像这样创建图像:

Image i = new Image  Source = "http://www.foo.com/foo.jpg ;

在将这个添加到布局后,如果 url 返回一个图像,它将显示它。我现在想要的是有一种方法可以知道这个 Url 是否是一个实际的图像。否则,我将显示默认图像。

问候。

编辑

我已经创建了一个函数:

public string GetImageSourceOrDefault(string orgUrl)
        
            var req = (HttpWebRequest)WebRequest.Create(orgUrl);
            req.Method = "HEAD";
            try
            
                using (var resp = req.GetResponse())
                
                    bool res = resp.ContentType.ToLower(CultureInfo.InvariantCulture)
                        .StartsWith("image/");
                    if (res)
                        return orgUrl;
                    else
                        return "defualt_logo.jpg";
                
            
            catch
            
                return "default_logo.jpg";
            

        

这个函数可以解决问题。但是,对于每个图像,它都会发出请求。我有一个列表视图,它显示了 220 个条目。使用这种方法会扰乱 listview 的加载时间。

注意:这个函数是使用依赖注入本地调用的。

也许会做进一步的改进。有什么想法吗?

【问题讨论】:

【参考方案1】:

FFImageLoading CachedImage 支持加载和错误占位符(以及更多)。它基本上是 Image 的 API 兼容替代品,具有附加属性。你可以试试。

    var cachedImage = new CachedImage() 
        LoadingPlaceholder = "Loading.png",
        ErrorPlaceholder = "Error.png"
    ;

https://github.com/molinch/FFImageLoading

【讨论】:

【参考方案2】:

Xamarin.FormsUriImageSource可以通过CacheValidityCachingEnabled属性指定不同的缓存长度,是否使用缓存。

默认情况下,它会在设备的本地存储中自动缓存 1 天的结果。

正如您所提到的,在您的功能中,您每次都在下载图像。

您当前没有存储和缓存结果以供以后重复使用的功能。

通过在平台特定层上实现类似的东西,可以绕过您当前每次重新下载图像的解决方案。

或者作为一种解决方法,如果您不想实现上述操作,您可以尝试将两个 Image 控件堆叠在一起,可能在 Grid 中,底部图像显示默认占位符图像,在另一个 Image 控件之上,如果成功下载,将使用 UriImageSource 显示预期图像。

您也可以挂钩到Image.SourcePropertyChange 通知并检测到它正在设置,然后显示图像。检测到后,您也许可以从临时占位符Image 控件中释放图像?

【讨论】:

以上是关于Xamarin Forms:如果找不到 URL,则默认图像的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms错误CS0246'Foundation'找不到

Xamarin.Forms.Xaml.XamlParseException:位置10:18。找不到关键字TwoButtonTopBarTemplate的StaticResource

在 Xamarin.Forms 条目视图中使用仅英文键盘

Xamarin.Forms.Picker 内容在 UWP 中重复

在 Android 的发布模式下编译时出现 Xamarin Forms 错误 - 找不到与给定名称“Base.V21.Widget.Design.AppBarLayout”匹配的资源

在 Xamarin Studio 中找不到类型或命名空间名称“页面”