Как отправлять и отображать запросы на получение в .NET MAUI?
Я пытаюсь реализовать небольшое приложение с помощью .NET MAUI, но во время выполнения постоянно получаю ошибки
System.Net.WebException: «Невозможно разрешить хост «reqres.in»: нет адреса, связанного с именем хоста»
Иногда я получаю сообщение об ошибке, похожее на:
System.InvalidCastException: «Указанное приведение недопустимо».
Чтобы отобразить ответ, я использовал элемент управления ListView и, наконец, CollectionView.
Я установил Newtonsoft.Json с помощью диспетчера пакетов Nuget.
Файл кода программной части содержит следующий код:
private const string url = "https://reqres.in/api/users";
private HttpClient _Client = new HttpClient();
private ObservableCollection<User> userCollection;
protected override async void OnAppearing()
{
base.OnAppearing();
var httpResponse = await _Client.GetAsync(url);
if (httpResponse.IsSuccessStatusCode)
{
Response responseData = JsonConvert.DeserializeObject<Response>(await httpResponse.Content.ReadAsStringAsync());
userCollection = new ObservableCollection<User>(responseData.Users);
User_List.ItemsSource = userCollection;
}
}
public class User
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("first_name")]
public string FirstName { get; set; }
[JsonProperty("last_name")]
public string LastName { get; set; }
[JsonProperty("avatar")]
public string AvatarURI { get; set; }
public string FullName
{
get { return $"{FirstName} {LastName}"; }
}
}
public class Response
{
[JsonProperty("page")]
public int Page { get; set; }
[JsonProperty("per_page")]
public int PerPage { get; set; }
[JsonProperty("total")]
public int Total { get; set; }
[JsonProperty("total_pages")]
public int TotalPages { get; set; }
[JsonProperty("data")]
public ObservableCollection<User> Users { get; set; }
}
Содержимое файла XAML:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TabbedPageTest.TeamMembersPage"
BackgroundColor="{DynamicResource SecondaryColor}">
<StackLayout>
<Label Text="Team Members"/>
<CollectionView x:Name="User_List" HeightRequest="400" >
<CollectionView.ItemTemplate>
<DataTemplate>
<ImageCell ImageSource="{Binding AvatarURI}" Text="{Binding FullName}" Detail="{Binding Email}"/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<Button Text="Back" Clicked="OnBackButtonClicked" VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
2 ответа
Когда я использую элемент управления ListView вместо CollectionView, приложение работает успешно, и ошибки не отображаются.
Я упомянул, что использовал элемент управления ListView, который я не тестировал должным образом.
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TabbedPageTest.TeamMembersPage"
BackgroundColor="{DynamicResource SecondaryColor}">
<StackLayout>
<Label Text="Team Members"/>
<ListView x:Name="User_List"
HeightRequest="400"
ItemSelected="OnListItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell ImageSource="{Binding AvatarURI}" Text="{Binding FullName}" Detail="{Binding Email}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button Text="Back" Clicked="OnBackButtonClicked" VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
Хотя это устарело, вот возможное объяснение для людей, которые ищут подобную проблему.
У меня была та же проблема, поэтому я переместил код httpResponse в новый метод GetData и вызвал его после InitializeComponent в mainPage. Я думаю, что, возможно, у OnAppearing могут быть проблемы со временем. Я изменил свой код, и у меня не было проблем.