Added WeatherApp Sample
This commit is contained in:
parent
4248652123
commit
de10d8a179
|
@ -33,6 +33,7 @@ namespace Samples
|
||||||
new DotMatrixClockSample().Publish();
|
new DotMatrixClockSample().Publish();
|
||||||
new EditorSample().Publish();
|
new EditorSample().Publish();
|
||||||
new TipCalcSample().Publish();
|
new TipCalcSample().Publish();
|
||||||
|
new WeatherAppSample().Publish();
|
||||||
new XuzzleSample().Publish();
|
new XuzzleSample().Publish();
|
||||||
|
|
||||||
UI.Present ("/display-alert");
|
UI.Present ("/display-alert");
|
||||||
|
|
|
@ -44,6 +44,9 @@
|
||||||
<EmbeddedResource Update="TipCalc\TipCalcPage.xaml">
|
<EmbeddedResource Update="TipCalc\TipCalcPage.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Update="WeatherApp\WeatherPage.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Update="XamlPreviewPage.xaml">
|
<EmbeddedResource Update="XamlPreviewPage.xaml">
|
||||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
@ -54,6 +57,7 @@
|
||||||
<None Remove="BugSweeper\Images\Xamarin120.png" />
|
<None Remove="BugSweeper\Images\Xamarin120.png" />
|
||||||
<None Remove="DotMatrixClock\DotMatrixClockPage.xaml" />
|
<None Remove="DotMatrixClock\DotMatrixClockPage.xaml" />
|
||||||
<None Remove="TipCalc\TipCalcPage.xaml" />
|
<None Remove="TipCalc\TipCalcPage.xaml" />
|
||||||
|
<None Remove="WeatherApp\WeatherPage.xaml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace WeatherApp
|
||||||
|
{
|
||||||
|
public class Core
|
||||||
|
{
|
||||||
|
public static async Task<Weather> GetWeather(string zipCode)
|
||||||
|
{
|
||||||
|
//Sign up for a free API key at http://openweathermap.org/appid
|
||||||
|
string key = "fc9f6c524fc093759cd28d41fda89a1b";
|
||||||
|
string queryString = "http://api.openweathermap.org/data/2.5/weather?zip="
|
||||||
|
+ zipCode + "&appid=" + key;
|
||||||
|
|
||||||
|
var results = await DataService.getDataFromService(queryString).ConfigureAwait(false);
|
||||||
|
|
||||||
|
if (results["weather"] != null)
|
||||||
|
{
|
||||||
|
Weather weather = new Weather
|
||||||
|
{
|
||||||
|
Title = (string)results["name"],
|
||||||
|
Temperature = (string)results["main"]["temp"] + " F",
|
||||||
|
Wind = (string)results["wind"]["speed"] + " mph",
|
||||||
|
Humidity = (string)results["main"]["humidity"] + " %",
|
||||||
|
Visibility = (string)results["weather"][0]["main"]
|
||||||
|
};
|
||||||
|
|
||||||
|
DateTime time = new DateTime(1970, 1, 1, 0, 0, 0, 0);
|
||||||
|
DateTime sunrise = time.AddSeconds((double)results["sys"]["sunrise"]);
|
||||||
|
DateTime sunset = time.AddSeconds((double)results["sys"]["sunset"]);
|
||||||
|
weather.Sunrise = sunrise.ToString() + " UTC";
|
||||||
|
weather.Sunset = sunset.ToString() + " UTC";
|
||||||
|
return weather;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System.Net.Http;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace WeatherApp
|
||||||
|
{
|
||||||
|
public class DataService
|
||||||
|
{
|
||||||
|
public static async Task<JContainer> getDataFromService(string queryString)
|
||||||
|
{
|
||||||
|
HttpClient client = new HttpClient();
|
||||||
|
var response = await client.GetAsync(queryString);
|
||||||
|
|
||||||
|
JContainer data = null;
|
||||||
|
if (response != null)
|
||||||
|
{
|
||||||
|
string json = response.Content.ReadAsStringAsync().Result;
|
||||||
|
data = (JContainer)JsonConvert.DeserializeObject(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
namespace WeatherApp
|
||||||
|
{
|
||||||
|
public class Weather
|
||||||
|
{
|
||||||
|
public string Title { get; set; }
|
||||||
|
public string Temperature { get; set; }
|
||||||
|
public string Wind { get; set; }
|
||||||
|
public string Humidity { get; set; }
|
||||||
|
public string Visibility { get; set; }
|
||||||
|
public string Sunrise { get; set; }
|
||||||
|
public string Sunset { get; set; }
|
||||||
|
|
||||||
|
public Weather()
|
||||||
|
{
|
||||||
|
//Because labels bind to these values, set them to an empty string to
|
||||||
|
//ensure that the label appears on all platforms by default.
|
||||||
|
this.Title = " ";
|
||||||
|
this.Temperature = " ";
|
||||||
|
this.Wind = " ";
|
||||||
|
this.Humidity = " ";
|
||||||
|
this.Visibility = " ";
|
||||||
|
this.Sunrise = " ";
|
||||||
|
this.Sunset = " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||||
|
x:Class="WeatherApp.WeatherPage">
|
||||||
|
|
||||||
|
<ContentPage.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<Style x:Key="labelStyle" TargetType="Label">
|
||||||
|
<Setter Property="TextColor" Value="#a8a8a8" />
|
||||||
|
<Setter Property="FontSize" Value="Small" />
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="fieldStyle" TargetType="Label">
|
||||||
|
<Setter Property="TextColor">
|
||||||
|
<OnPlatform x:TypeArguments="Color">
|
||||||
|
<On Platform="iOS" Value="Black" />
|
||||||
|
<On Platform="Android, UWP, WinRT, WinPhone" Value="White" />
|
||||||
|
</OnPlatform>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="FontSize" Value="Medium" />
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="fieldView" TargetType="ContentView">
|
||||||
|
<Setter Property="Padding" Value="10,0,0,0" />
|
||||||
|
</Style>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</ContentPage.Resources>
|
||||||
|
|
||||||
|
<ContentPage.Content>
|
||||||
|
<ScrollView>
|
||||||
|
<StackLayout>
|
||||||
|
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand"
|
||||||
|
BackgroundColor="#545454">
|
||||||
|
<StackLayout Padding="10,10,10,10" HorizontalOptions="Start">
|
||||||
|
<Label Text="Search by Zip Code" TextColor="White" FontAttributes="Bold"
|
||||||
|
FontSize="Medium" />
|
||||||
|
<Label x:Name="zipCodeLabel" Text="Zip Code" Style="{StaticResource labelStyle}" />
|
||||||
|
<Entry x:Name="zipCodeEntry" />
|
||||||
|
</StackLayout>
|
||||||
|
<StackLayout Padding="0,0,0,10" VerticalOptions="End">
|
||||||
|
<Button x:Name="getWeatherBtn" Text="Get Weather" WidthRequest="185" BorderWidth="1" >
|
||||||
|
<!-- Set iOS colors; use defaults on other platforms -->
|
||||||
|
<Button.TextColor>
|
||||||
|
<OnPlatform x:TypeArguments="Color">
|
||||||
|
<On Platform="iOS" Value="White" />
|
||||||
|
</OnPlatform>
|
||||||
|
</Button.TextColor>
|
||||||
|
<Button.BorderColor>
|
||||||
|
<OnPlatform x:TypeArguments="Color">
|
||||||
|
<On Platform="iOS" Value="White" />
|
||||||
|
</OnPlatform>
|
||||||
|
</Button.BorderColor>
|
||||||
|
</Button>
|
||||||
|
</StackLayout>
|
||||||
|
</StackLayout>
|
||||||
|
<StackLayout Padding="10,10,10,10" HorizontalOptions="Start">
|
||||||
|
<Label Text="Location" Style="{StaticResource labelStyle}" />
|
||||||
|
<ContentView Style="{StaticResource fieldView}">
|
||||||
|
<Label Text="{Binding Title}" Style="{StaticResource fieldStyle}" />
|
||||||
|
</ContentView>
|
||||||
|
<Label Text="Temperature" Style="{StaticResource labelStyle}" />
|
||||||
|
<ContentView Style="{StaticResource fieldView}">
|
||||||
|
<Label x:Name="tempLabel" Text="{Binding Temperature}"
|
||||||
|
Style="{StaticResource fieldStyle}" />
|
||||||
|
</ContentView>
|
||||||
|
<Label Text="Wind Speed" Style="{StaticResource labelStyle}" />
|
||||||
|
<ContentView Style="{StaticResource fieldView}">
|
||||||
|
<Label x:Name="windLabel" Text="{Binding Wind}" Style="{StaticResource fieldStyle}" />
|
||||||
|
</ContentView>
|
||||||
|
<Label Text="Humidity" Style="{StaticResource labelStyle}" />
|
||||||
|
<ContentView Style="{StaticResource fieldView}">
|
||||||
|
<Label x:Name="humidityLabel" Text="{Binding Humidity}"
|
||||||
|
Style="{StaticResource fieldStyle}" />
|
||||||
|
</ContentView>
|
||||||
|
<Label Text="Visibility" Style="{StaticResource labelStyle}" />
|
||||||
|
<ContentView Style="{StaticResource fieldView}">
|
||||||
|
<Label x:Name="visibilitylabel" Text="{Binding Visibility}"
|
||||||
|
Style="{StaticResource fieldStyle}" />
|
||||||
|
</ContentView>
|
||||||
|
<Label Text="Time of Sunrise" Style="{StaticResource labelStyle}" />
|
||||||
|
<ContentView Style="{StaticResource fieldView}">
|
||||||
|
<Label x:Name="sunriseLabel" Text="{Binding Sunrise}"
|
||||||
|
Style="{StaticResource fieldStyle}" />
|
||||||
|
</ContentView>
|
||||||
|
<Label Text="Time of Sunset" Style="{StaticResource labelStyle}" />
|
||||||
|
<ContentView Style="{StaticResource fieldView}">
|
||||||
|
<Label x:Name="sunsetLabel" Text="{Binding Sunset}"
|
||||||
|
Style="{StaticResource fieldStyle}" />
|
||||||
|
</ContentView>
|
||||||
|
</StackLayout>
|
||||||
|
</StackLayout>
|
||||||
|
</ScrollView>
|
||||||
|
</ContentPage.Content>
|
||||||
|
</ContentPage>
|
|
@ -0,0 +1,31 @@
|
||||||
|
using System;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace WeatherApp
|
||||||
|
{
|
||||||
|
public partial class WeatherPage : ContentPage
|
||||||
|
{
|
||||||
|
public WeatherPage()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
this.Title = "Sample Weather App";
|
||||||
|
getWeatherBtn.Clicked += GetWeatherBtn_Clicked;
|
||||||
|
|
||||||
|
//Set the default binding to a default object for now
|
||||||
|
this.BindingContext = new Weather();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void GetWeatherBtn_Clicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (!String.IsNullOrEmpty(zipCodeEntry.Text))
|
||||||
|
{
|
||||||
|
Weather weather = await Core.GetWeather(zipCodeEntry.Text);
|
||||||
|
if (weather != null)
|
||||||
|
{
|
||||||
|
this.BindingContext = weather;
|
||||||
|
getWeatherBtn.Text = "Search Again";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
using Ooui;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Samples
|
||||||
|
{
|
||||||
|
public class WeatherAppSample : ISample
|
||||||
|
{
|
||||||
|
public string Title => "Xamarin.Forms WeatherApp";
|
||||||
|
|
||||||
|
public Ooui.Element CreateElement()
|
||||||
|
{
|
||||||
|
var page = new WeatherApp.WeatherPage();
|
||||||
|
return page.GetOouiElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Publish()
|
||||||
|
{
|
||||||
|
UI.Publish("/weatherapp", CreateElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue