Tel. 06151 / 39 10 793

Windows Phone 8 - Hello World

27.11.2012  • Lavong Soysavanh
Windows Phone 8 - Hello World

wer die letzten Wochen und Monate gespannt das Treiben um Windows 8 und Windows Phone 8 beobachtet hat, wird nun vermutlich ein wenig ernüchtert sein. Das Thema wird in den Medien schön breitgeredet, mit sowohl positiven als auch negativen Schlagzeilen, aber der von vielen erhoffte, brachenumkrempelnde Wurf ist es dann doch nicht geworden. Zumindest nicht offensichtlich. Aber das soll hier garnicht Thema sein. Kommen wir doch zu etwas handfesterem: dem obligatorischen Hello World.

Wobei ein einfaches Hello World dank Microsofts hervorragender Entwicklungsumgebung mit wenigen Mausklicks zusammengebaut ist. Wir erweitern die App daher zu Berichtszwecken doch einfach um einen Webserviceaufruf, damit der geneigte Leser auch was zum nachprogrammieren hat. Kurze Googlesuche nach "free web service" brachte die Seite freegeoip.net hervor. Bauen wir die doch schnell ein. Und los gehts.

Zunächst öffnen Visual Studio 2012 (die kostenfreie Express Version reicht vollkommen aus) und erstellen ein neues Windows Phone 8 Projekt mit C#. Was wir dann zu sehen bekommen ist eine nach Phone aussehende Designeransicht der MainPage.xaml (falls nicht, kann die mittels Klick auf die Datei im Solution Explorer hervorgeholt werden). Auf diese können wir Windows Phone Controls per Drag and Drop aus der Toolbox ziehen. Haben wir das mit einer TextBox, einem Button, einem ScrollViewer und einem TextBlock gemacht, könnte das in etwa folgendermaßen aussehen:

        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0">
            <Run Text="HelloFreeGeoIp"/>
            <LineBreak/>
            <Run/>
            </TextBlock>
            <TextBlock Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" Text="GeoIp Lookup"/>
        </StackPanel>
        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="72" TextWrapping="Wrap" Text="8.8.8.8" VerticalAlignment="Top" Width="340" KeyDown="textBox_KeyDown" TextChanged="textBox_TextChanged"/>
            <Button Content="Lookup" HorizontalAlignment="Left" Margin="327,0,0,0" VerticalAlignment="Top" Width="129" Click="Button_Click_1"/>
            <ScrollViewer HorizontalAlignment="Left" Height="513" Margin="10,72,0,0" VerticalAlignment="Top" Width="446">
                <TextBlock x:Name="textBlock" TextWrapping="Wrap" Text="TextBlock"/>
            </ScrollViewer>
        </Grid>

Allen Elementen kann man bequem Eigenschaften und EventHandler in der Properties-Ansicht vergeben (falls diese nicht da ist auf den Schraubenschlüssel im Solution Explorer klicken). Den Klick-Event des Buttons bspw. fügen wir hinzu, indem wir den Button markieren, das EventHandler Symbol (sieht aus wir ein Blitz) im Properties Panel betätigen, und auf das entsprechende Event, in unserem Fall "Click", doppelklicken. Visual Studio legt dann den entsprechenden Methodenrumpf in der MainPage.xaml.cs an und springt auch vorausschauenderweise direkt dorthin damit wir ihn bearbeiten können. Etwa so könnte er aussehen:

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine("button pressed...");
            DoFreeGeoIpRq();
        }

Dasselbe machen wir auch mit unserer TextBox, falls wir wollen, dass sie diesselbe Aktion ausführt bei Betätigen der Enter Taste:

        private void textBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                System.Diagnostics.Debug.WriteLine("enter pressed...");
                DoFreeGeoIpRq();
            }
        }

Und nun zur eigentlichen Aktion DoFreeGeoIpRq(), dem Webserviceaufruf. Hier sei angemerkt, dass die ein wenig komplizierter aussieht als auf Windows 8 (ja, "Windows Phone 8" und "Windows 8" Apps verhalten sich hier verschieden), da es den netten HttpClient auf Windows Phone nicht gibt. Mit ihm bräuchte man den CallBack nicht und derselbe Http Aufruf stünde in drei übersichtlichen Zeilen da. Wie dem auch sei hier die Windows Phone Variante:

        private void DoFreeGeoIpRq()
        {
            String url = "http://freegeoip.net/json/" + textBox.Text;
            HttpWebRequest webRq = WebRequest.CreateHttp(url);
            webRq.BeginGetResponse(new AsyncCallback(DoFreeGeoIpRqCallback), webRq);
        }

        private void DoFreeGeoIpRqCallback(IAsyncResult callbackResult)
        {
            HttpWebRequest rq = (HttpWebRequest)callbackResult.AsyncState;
            HttpWebResponse rs = (HttpWebResponse)rq.EndGetResponse(callbackResult);

            using (StreamReader httpwebStreamReader = new StreamReader(rs.GetResponseStream()))
            {
                string results = httpwebStreamReader.ReadToEnd();
                Dispatcher.BeginInvoke(() => textBlock.Text = results);
            }
            rs.Close();
        }

Wie wir sehen, erstellen wir einen HttpWebRequest mit der aufzurufenden Url und übergeben beim Aufruf ein Delegate als CallBack, in welchem die Response ausgelesen und in unser TextBlock geschrieben wird. Eigentlich doch relativ simpel. Lassen wir die App nun im Emulator laufen, sieht das Ergebnis wie folgt aus:

So, soweit zur ersten Windows Phone 8 Hello World App. Viel Spass beim Nachprogrammieren und Herumspielen mit Visual Studio!

Beste Grüße,
Lavong

Windows Phone 8 - Hello World

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.

Suchen


Unsere Partner
comm-press comm-press
Drupal Spezialisten aus Hamburg
neosmart - Digital Media, Webdesign & Webentwicklung<br />
aus Darmstadt neosmart
Digital Media, Webdesign & Webentwicklung aus Darmstadt
trinomica - Software Solutions trinomica
Software Solutions
Sponsoring und Mitgliedsschaften

Drupal Initiative Deutschland - Firmen-Mitglied

So finden Sie uns