Xamarin外部图片无法显示问题

5

我正在尝试在Visual Studio 2019的Xamarin项目中添加图像。 图像可以从本地存储中显示,但无法从外部链接中显示。 我需要能够显示来自图像URL的图像。

我尝试过以下方法:

在Android API 27、28上构建应用程序,
检查SSL实现选项是否为本机TLS 1.2+,
更改站点SSL状态为http、https。
更改来自不同站点的图像和图像URL,
更改图像大小在50 KB和3 MB之间,
尝试使用其他图像扩展名,如jpg、jpeg、png等。

当我卸载并重建应用程序时,在第一次运行应用程序时会抛出此错误:

Image Loading: Error getting stream for https://p-valid.com/images/logo.png:
System.ObjectDisposedException:

在我看来,这个错误是Xamarin中的一个bug。
请将以下代码添加到AndroidManifest.xml文件中。
<uses-permission android:name="android.permission.INTERNET" />

只有将图像放入drawable文件夹中并使用其名称获取时,才能显示图像:

var image = new Image { Source =  "test.jpg"};

我的主要代码是:

var layout = new StackLayout { Padding = new Thickness(5, 10) };

var label = new Label { Text = "Hello world" };
var image = new Image { 
            Source = ImageSource.FromUri(new Uri("http://mydatabase/test.jpg"))
};

layout.Children.Add(label);
layout.Children.Add(image);

this.Content = layout;

我期望这段代码的功能是:
输出 Hello World 并显示图片。

但实际上只输出了 Hello World,没有显示图片。
同时,在调试输出控制台中会写出以下错误:

ImageLoaderSourceHandler: Could not retrieve image or image data was invalid: Uri http://mydatabase/test.jpg

在我看来,这段代码涉及到错误的缓存图像数据。

这个URL是否可以被你的设备访问?你是否已经使用设备的浏览器进行测试了?你的应用程序是否启用了互联网权限? - Jason
我的URL是“p-valid.com/images/logo.png”。 是的,设备能够连接互联网和此URL。 我从设备的Chrome浏览器测试过了。在AndroidManifest.xml文件中还有代码<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - Turkuz olenedek
这不是正确的权限 - android.permission.INTERNET - Jason
@Turkuzolenedek 在测试共享主代码后,它在我的项目中可以正常工作。使用的是哪个版本的VS和Xamarin Forms? - Junior Jiang
这是在 Visual Studio 2019 上 NuGet 包的第一个设置。 - Turkuz olenedek
2个回答

4
在开始时,关于xamarin forms版本的新项目是4.2。然而,它出现了错误:

[0:] ImageLoaderSourceHandler: 无法检索图像或图像数据无效:Uri:https://aka.ms/campus.jpg

但是,在检查项目中的最新版Xamarin Forms后,您可以将其更新到最新版本:4.3.0.908675,以检查是否有效。
然后,以下代码在我的本地项目中有效:
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        var layout = new StackLayout { Padding = new Thickness(5, 10) };

        var label = new Label { Text = "Hello world" };
        var image = new Image
        {
            Source = ImageSource.FromUri(new Uri("https://s2.ax1x.com/2019/10/28/K6KUo9.png")),
            BackgroundColor = Color.Accent
        };

        layout.Children.Add(label);
        layout.Children.Add(image);

        Content = layout;
    }
}

需要在清单中添加权限:

<uses-permission android:name="android.permission.INTERNET" />

效果:

enter image description here

注意:最好不要加载大尺寸的图片。这也会导致加载错误。

没错,Xamarin 4.2有这个错误,更新后解决了这个问题。 - Mohamed H. Mohi El-Dien
Xamarin.Forms没有加载来自不安全网站的外部图像。我的意思是,http的网站。 - Thamarai T
在Xamarin.Forms 5.0.0.2012中,加载安全站点URL(https)的图像正常工作。 - Thamarai T

0

我曾经遇到同样的问题,并在这里找到了解决方案:https://doumer.me/resolve-image-loading-error-in-xamarin-forms/

右键单击您的Android项目

选择属性

转到Android选项

点击高级按钮

将HTTPClient更改为Managed

将SSL/TLS实现更改为本机TLS 1.2+

保存更改并运行您的项目。

现在,Uri中的图像将会加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接