我有一个便携式Xamarin应用程序,其中一些"特定覆盖"适用于Android和iOS。
我有一个带有图像的内容页面,需要从服务器下载。由于该图像不是服务器上的"公共",因此我无法使用简单的URL将图像添加到图像控件中。因此,我的代码正在下载图像,在本地保存,然后将图像URL传递给图像控件:
string filePath = GetThumbnailPath();
Image img = new Image
{
HorizontalOptions = LayoutOptions.CenterAndExpand,
WidthRequest = 150,
HeightRequest = 150,
Source = FileImageSource.FromFile(filePath),
Margin = new Thickness(0, 10, 0, 10)
};
layout.Children.Add(img);
在Android上,一切都很好。在iOS上,图像保存到:
string directory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string filePath = Path.Combine(directory, "thumbnail.jpg");
但是,当页面加载时,应用程序崩溃了:System.Exception:无法初始化类型的" Uikit.uiimage"的实例:本机'initwithContentsOffile:'方法返回 nil 。
我不能将图像更改为捆绑资源(其 Dynamic ),并且无法公开服务器调用(其处理程序需要标题参数或cookie)
在iOS上您可以使用此代码将图像保存到本地存储:
var rootFolder = FileSystem.Current.LocalStorage;
var folder = await rootFolder.CreateFolderAsync("Images", CreationCollisionOption.OpenIfExists);
var file = await folder.CreateFileAsync("image.png", CreationCollisionOption.ReplaceExisting);
var httpClient = new HttpClient();
var buffer = await httpClient.GetByteArrayAsync(url);
using (Stream stream = await file.OpenAsync(PCLStorage.FileAccess.ReadAndWrite))
{
stream.Write(buffer, 0, buffer.Length);
}
return file.Path;
您可以显示以下图像:
var imageSource = new FileImageSource { File = filePath};
MyPicture.Source = imageSource;
在定义mypicture的地方:
<Image x:Name="MyPicture">