новый программист xamarin здесь. Мне нужно отобразить comi c изображение из inte rnet, используя URL, но почему-то система продолжает сообщать мне, что ссылка на URL не работает, но я не знаю, почему, когда я создаю новый UriImageSource.
Мой первый метод состоял в том, чтобы попытаться отобразить изображение, используя BitMapImage , но оно доступно только для WindowsForms или WPF, поэтому мне нужна альтернатива для этого, если UriImageSource не работает для меня. Я нахожусь на Ма c кстати.
Это xaml:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Weather_App.MainPage">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackLayout Grid.Row="1" Orientation="Horizontal" HorizontalOptions="Center">
<Image x:Name="backgroundImage" Margin="20"/>
</StackLayout>
</Grid>
</ContentPage>
Это MainPage.cs:
using Xamarin.Forms;
namespace Weather_App
{
// Learn more about making custom code visible in the Xamarin.Forms previewer
// by visiting https://aka.ms/xamarinforms-previewer
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
{
private int maxNumber = 0;
private int currentNumber = 0;
public MainPage()
{
InitializeComponent();
ViewModel.ApiHelper.InitializeClient();
string url = Convert.ToString(ComicProcessor.LoadComic());
backgroundImage.Source = new UriImageSource
{
Uri = new Uri(url),
CachingEnabled = false,
CacheValidity = TimeSpan.FromHours(1)
};
}
}
}
Наконец, это является методом viewmodel / LoadComi c Сначала я попытался вернуть comi c вместо URL, но поскольку BitMapImage для Ma c не существовало, я возвратил url вместо , потому что думал, что мог бы использовать его для Экземпляр UriImageSource. Свойства comi c включают целое число Num и строку Img.
namespace Weather_App
{
public class ComicProcessor
{
public static int MaxComicNumber { get; set; }
public async static Task<string> LoadComic(int comicNumber = 0)
{
string url = "";
if (comicNumber > 0)
{
url = $"https://xkcd.com/{comicNumber}/info.0.json";
}
else
{
url = $"https://xkcd.com/info.0.json";
}
using (HttpResponseMessage response = await ViewModel.ApiHelper.ApiClient.GetAsync(url))
{
if (response.IsSuccessStatusCode)//If response successful do something then
{
// Takes data in as json and converted it to the type you have given and match anything that it finds
ComicModel comic = await response.Content.ReadAsAsync<ComicModel>();
if (comicNumber == 0)
{
MaxComicNumber = comic.Num;
}
return url;
}
else
{
// Outputs reason why it wasn't successful
throw new Exception(response.ReasonPhrase);
}
}
}
}
}