Как получить 5-дневный прогноз погоды из openweathermap в мое приложение uwp

Я не опытный разработчик. Я просто нуб в программировании.

Мне удалось получить текущую информацию о погоде в моем приложении по этому URL-адресу http://samples.openweathermap.org/data/2.5/weather?lat=7.0744&lon=79.8919&appid=a7cae8ecfab2535dec05a83525f5ac7a

но я не знаю, как получить данные прогноза погоды на 5 дней с этого URL-адреса openweathermap http://samples.openweathermap.org/data/2.5/forecast?lat=7.0744&lon=79.8919&appid=a7cae8ecfab2535dec05a83525f5ac7a

это класс Weatherforecast, который я создал

 class WeatherForecast
{
    public async static Task<RootObject> GetWeatherForecast(double lat,double lon)
    {
        var httpn = new HttpClient();
        var uri = String.Format("http://samples.openweathermap.org/data/2.5/forecast?lat={0}&lon={1}&appid=a7cae8ecfab2535dec05a83525f5ac7a", lat, lon);
        var response = await httpn.GetAsync(uri);
        var result = await response.Content.ReadAsStringAsync();
        var data = JsonConvert.DeserializeObject<RootObject>(result);

        return data;


    }

}
public class Main
{
    public double temp { get; set; }
    public double temp_min { get; set; }
    public double temp_max { get; set; }
    public double pressure { get; set; }
    public double sea_level { get; set; }
    public double grnd_level { get; set; }
    public int humidity { get; set; }
    public int temp_kf { get; set; }
}

public class Weather
{
    public int id { get; set; }
    public string main { get; set; }
    public string description { get; set; }
    public string icon { get; set; }
}

public class Clouds
{
    public int all { get; set; }
}

public class Wind
{
    public double speed { get; set; }
    public double deg { get; set; }
}

public class Rain
{
}

public class Sys
{
    public string pod { get; set; }
}

public class List
{
    public int dt { get; set; }
    public Main main { get; set; }
    public List<Weather> weather { get; set; }
    public Clouds clouds { get; set; }
    public Wind wind { get; set; }
    public Rain rain { get; set; }
    public Sys sys { get; set; }
    public string dt_txt { get; set; }
}

public class Coord
{
    public double lat { get; set; }
    public double lon { get; set; }
}

public class City
{
    public int id { get; set; }
    public string name { get; set; }
    public Coord coord { get; set; }
    public string country { get; set; }
}

public class RootObject
{
    public string cod { get; set; }
    public double message { get; set; }
    public int cnt { get; set; }
    public List<List> list { get; set; }
    public City city { get; set; }
}

`

Это событие нажатия кнопки getweatherforcast (я добавил кнопку для получения прогноза)

    private async void ForecastButton_Click(object sender, RoutedEventArgs e)
    {
        var position1 = await LocationManager.GetPosition();
        var latitude1 = position1.Coordinate.Latitude;
        var longitude1 = position1.Coordinate.Longitude;
        UWPWeatherforMobileForeCast.RootObject forecast = await WeatherForecast.GetWeatherForecast(latitude1, longitude1);

    }

Это Gridview, я хочу связать данные

   <GridView x:Name="ForecastGridView" >
            <GridView.ItemTemplate>
                <DataTemplate >
                    <StackPanel>
                        <TextBlock Name="forecastdatetextblock"/>
                        <TextBlock Name="forecasttemptextblock" />
                        <TextBlock Name="forecastdescriptiontextblock"/>
                     </StackPanel>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>

Как привязать дату прогноза на 5 дней, температуру и описание к этому представлению сетки. какой источник данных и тип данных я должен использовать?

Это скриншот моего приложения, это очень простое приложение для моих образовательных целей. Я хочу привязать дату, температуру, описание к сетке в той области, которую я нарисовал.

p.s. это мой первый вопрос о стеке, поэтому простите меня, если есть какие-то ошибки


person Thisara98    schedule 01.12.2017    source источник
comment
Вы начали получать данные с помощью JSON или просто конвертируете JSON в C#? Если да, опубликуйте свои методы получения JSON, и мы вам поможем... Если нет, мы не кодируем его для вас. Пожалуйста, в следующий раз выражайтесь яснее :)   -  person EchoZulu    schedule 01.12.2017
comment
Извини, я виноват. Я добавил код, который я написал.   -  person Thisara98    schedule 01.12.2017
comment
Думаю, это поможет вам openweathermap.org/forecast5   -  person Amit Bisht    schedule 01.12.2017
comment
То, что вы получаете, это просто модель данных. Подготовьте ViewModel (например, MyViewViewModel), а затем внутри создайте коллекцию, например. IEnumerable‹ForecastVM›. Это даст вам гибкость, и вы не будете зависеть от получаемых данных. Тогда вы сможете заполнить коллекцию, например. 5 дней от модели, которую вы извлекли.   -  person Przemek Marcinkiewicz    schedule 01.12.2017


Ответы (1)


Как привязать дату прогноза на 5 дней, температуру и описание к этому представлению сетки. какой источник данных и тип данных я должен использовать?

После того, как вы получите объект RootObject в событии нажатия кнопки, вы должны обработать данные, чтобы получить пятидневную погоду и отобразить их в пользовательском интерфейсе. Вот простой пример кода для привязки 5-дневной погоды к пользовательскому интерфейсу, вы можете получить ссылку. (Нажмите кнопку, чтобы получить данные за 5 дней и отобразить их)

Это xaml

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Button Content="get whether" Click="Button_Click"/>
    <GridView ItemsSource="{Binding collection}" x:Name="ForecastGridView">
        <GridView.ItemTemplate>
            <DataTemplate >
                <StackPanel>
                    <TextBlock Name="forecastdatetextblock" Text="{Binding dt}"/>
                    <TextBlock Name="forecasttemptextblock" Text="{Binding main.temp}" />
                    <TextBlock Name="forecastdescriptiontextblock"  Text="{Binding weather[0].description}"/>
                </StackPanel>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
</StackPanel>

Это код

public MainPage()
{
    this.InitializeComponent();
    collection = new ObservableCollection<List>();
    this.DataContext = this;
}

public ObservableCollection<List> collection { get; set; }
private async void Button_Click(object sender, RoutedEventArgs e)
{
    var position1 = await LocationManager.GetPosition();
    var latitude1 = position1.Coordinate.Latitude;
    var longitude1 = position1.Coordinate.Longitude;
    RootObject forecast = await WeatherForecast.GetWeatherForecast(latitude1, longitude1);

    for (int i = 0; i < 5; i++)
    {

        collection.Add(forecast.list[i]);
    }

    ForecastGridView.ItemsSource = collection;

}
person Breeze Liu - MSFT    schedule 05.12.2017