ListView в Xamarin с использованием RestApi - PullRequest
0 голосов
/ 17 января 2019

Я могу решить эту ошибку. Я хотел отобразить ListView данных API, которые в большом количестве.

Например, API содержит данные этого типа:

[{"id":"666","employee_name":"xyz","employee_salary":"123","employee_age":"23","profile_image":""}]

Снимок экрана с ошибкой: screenshot of error

Class.cs, который я сделал после преобразования JSON в c #

 public class employees
    {

        public string id { get; set; }
        public string employee_name { get; set; }
        public string employee_salary { get; set; }
        public string employee_age { get; set; }
        public string profile_image { get; set; }

    }

Это файл XAML.cs, где LoadData() используется для вызова API

public async void LoadData()
        {
            var content = "";
            HttpClient client = new HttpClient();
            var RestURL = "MY API";  
            client.BaseAddress = new Uri(RestURL);
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage response = await client.GetAsync(RestURL);
            content = await response.Content.ReadAsStringAsync();
            var Items = JsonConvert.DeserializeObject<List<employees>>(content);
            ListView1.ItemsSource = Items;
        }

Это XAML-файл Xamarin.Forms:

<StackLayout BackgroundColor="White">
        <ListView x:Name="ListView1" RowHeight="60">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Vertical" Padding="8,0,8,0">
                            <Label Text="{Binding id}" TextColor="#000" FontSize="14" LineBreakMode="TailTruncation" />
                            <Label Text="{Binding employee_name}" TextColor="#000" LineBreakMode="TailTruncation" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вы используете неверную конечную точку, вы должны использовать эту, чтобы получить список сотрудников

 var RestURL = "http://dummy.restapiexample.com/api/v1/employees/";  

Вы можете проверить документацию API

0 голосов
/ 18 января 2019

Сначала нужно создать класс локальной модели:

public class TodoItem
{
    public string id { get; set; }

    public string employee_name { get; set; }

    public string employee_salary{ get; set; }

    public bool employee_age { get; set; }

    public bool profile_image { get; set; }
}

А в RestService можно использовать TodoItem:

public List<TodoItem> Items { get; private set; }

public async Task<List<TodoItem>> RefreshDataAsync ()
{
   Items = new List<TodoItem> ();
 // RestUrl = http://developer.xamarin.com:8081/api/todoitems
   var uri = new Uri (string.Format (Constants.RestUrl, string.Empty));
   try {
       var response = await client.GetAsync (uri);
       if (response.IsSuccessStatusCode) {
           var content = await response.Content.ReadAsStringAsync ();
           Items = JsonConvert.DeserializeObject <List<TodoItem>> (content);
        }
    } catch (Exception ex) {
           Debug.WriteLine (@"ERROR {0}", ex.Message);
    }
    return Items;
}

И последнее, где ваш список itemsource может быть установлен следующим образом:

listView.ItemsSource = await RestService.RefreshDataAsync();

Примечание: вот официальный образец , к которому вы можете обратиться.

У меня есть возможность исправить эту ошибку, я хотел отобразить список данных API, который в большом количестве

Отображение больших данных в виде списка, вот метод показа подкачки . После получения данных API, сохранения их в локальном CacheListData. Не устанавливайте непосредственно в listView.ItemsSource. И вам нужно создать ItemListData для добавления данных из CacheListData. Какое количество добавленных данных по вашему желанию когда-то нужно отобразить. При просмотре списка прокрутите вниз, затем покажите Добавить еще раз Swipe метод для перезагрузки данных следующей страницы.

Как правило, Решение заключается в том, чтобы сначала кэшировать данные lagre в локальные данные. Затем получить данные немного по странице, чтобы показать. Вот ссылка на решение, на которую можно ссылаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...