Как я могу преобразовать из задачи в список в этом случае? - PullRequest
0 голосов
/ 29 марта 2020

Я получаю эту ошибку ...

Невозможно неявно преобразовать тип 'System.Threading.Tasks.Task System.Collections.Generi c .List I'ts.ViewModel.PickerViewModel.Location '** to **' System.Collections.Generi c. Список мыслей. ViewModel.PickerViewModel.Location '

У кого-нибудь есть идея?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net.Http;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Xamarin.Essentials;

namespace Thoughts.ViewModel
{
    public class PickerViewModel 
    {
        public List<Location> LocationsList { get; set; }

        public class Location
        {
            public string name { get; set; }
        }

        public PickerViewModel()
        {
            LocationsList = GetLocations();
        }

        public async Task<JToken> GoogleApi()
        {
            var location = await Geolocation.GetLastKnownLocationAsync();
            string locationString = location.Latitude.ToString() + "," + location.Longitude.ToString();
            string radius = "2000";
            string apiKey = "My_API_KEY";//Ofcourse its filled in


            var httphelper = new HttpClient();
            string link = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=" + locationString + "&radius=" + radius + "&key=" + apiKey;
            var data = await httphelper.GetStringAsync(link);
            var jsonData = JObject.Parse(data)["results"];
            return jsonData;

        }

        public async Task<List<Location>> GetLocations()
        {
            JToken data = await GoogleApi();
            var locationList = new List<Location>() { };
            foreach (var location in data)
            {
                new Location() {name = location["name"].ToString() };
            }
            return locationList;
        }
    }
}

1 Ответ

1 голос
/ 30 марта 2020

A Task<T> - это оболочка Task вокруг значения. Как правило, вы можете развернуть его, используя await.

Однако в этом случае значение, которое вы распаковываете, - это то, что вы хотите отобразить в пользовательском интерфейсе. Поэтому здесь вы бы хотели, чтобы ваш конструктор настроил что-то для отображения за это время (пустая коллекция или индикатор «Загрузка ...»). Ваш конструктор должен затем запустить асинхронную операцию, которая обновит данных для отображения. В этой статье более подробно рассматривается этот шаблон.

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