Windows Storeアプリ開発で今覚えておきたいTips10選+α 14

ロジックコードを記述する

次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト3のコードを記述します。

ロジックコードを記述する

リスト3 (MainWindow.xaml.vb)

Option Strict On

最新の HTTP アプリケーション用のプログラミングインターフェイスを提供するクラスの含まれる、System.Net.Http名前空間をインポートします。

Imports System.Net.Http

TouristInfoクラス内に文字列型のname、title、description、urlプロパティを定義しておきます。

Public Class TouristInfo
  Property name As String
  Property title As String
  Property description As String
  Property url As String
End Class

Public NotInheritable Class MainPage
  Inherits Page<

リクルートより取得したキーで定数メンバ変数ApiKeyを初期化しておきます。APIキーは下記のURLより「新規登録」でメールアドレスを入力して送ると、リクルートよりキーが送られてきますので、それを使用します。
→ http://webservice.recruit.co.jp/ab-road/reference.html

ConstApiKey As String = "リクルートより取得したキー"
 Dim countryName As String

コンボボックスより地域が選択された時の処理

ComboBoxより選択された値をComboBoxItemにキャストし、Contentプロパティで取得した値を文字列に変換して変数areaNameに格納します。
変数areaNameの値で条件分岐を行います。
それぞれの地域の名前で変数countryNameにエリアコードを格納します。

変数myUrlに

String.Format("http://webservice.recruit.co.jp/ab-road/spot/v1/?key={0}&area={1}&count=100&format=xml", ApiKey, countryName)

と指定して、引数keyにリクルートより取得したApiKeyを指定し、areaに変数countryName変数の値を指定します。このクエリで返される結果XMLは図5のような構造です。赤い下線部分の要素の値を使用します。

図5:結果XMLの構造(クリックで拡大)

新しいHttpClientのインスタンスmyHttpClientオブジェクトを作成します。
GetFileAsyncメソッドで、指定URIにGET要求を送信し、非同期操作で応答本体を文字列として取得し、変数myResultに格納します。

ルート要素に名前空間が付加されているため、読み込む際の邪魔になりますので、Replace関数でに置換します。

XElement.Parseメソッドで変数myResultの内容を文字列として読み込みます。

TouristInfoクラス型のリストであるmyTouristInfoオブジェクトを作成します。
Descendantsメソッドで全ての子孫要素に対して、変数resultで要素の内容を取得しながら反復処理を行います。

TouristInfoクラスのnameプロパティに要素の値を、titleプロパティに要素の値を、descriptionプロパティに<description>要素の値を、urlプロパティに<url>要素の値を指定して、AddメソッドでmyTouristInfoオブジェクトに追加していきます。<br> GridViewのItemsSourceプロパティに変数myTouristInfoオブジェクト値を指定します。これでタイルの中にname、title、descriptionの内容が表示されます。TitleTextBlockにComboBoxより選択した地域名を「の観光地」という文字列と連結して表示します。</p> <pre class="brush: plain; " type="syntaxhighlighter"> Private Async Sub ComboBox1_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboBox1.SelectionChanged Dim areaName = DirectCast(ComboBox1.SelectedItem, ComboBoxItem).Content.ToString Select Case areaName Case "アジア" countryName = "AAS" Case "ビーチリゾート" countryName = "BCH" Case "ハワイ" countryName = "HWI" Case "ヨーロッパ" countryName = "EUR" Case "アメリカ" countryName = "DUS" Case "オセアニア" countryName = "FOC" Case "アフリカ・その他" countryName = "CAF" End Select Dim myUrl = String.Format("http://webservice.recruit.co.jp/ab-road/spot/v1/?key={0}&area={1}&count=100&format=xml", ApiKey, countryName) Dim myHttpClient As New HttpClient Dim myResult As String = Await myHttpClient.GetStringAsync(myUrl) myResult = myResult.Replace("<results xmlns=" &ChrW(34) & "http://webservice.recruit.co.jp/ab-road/" &ChrW(34) & ">", "<results>") Dim xmldoc As XElement = XElement.Parse(myResult) Dim myTouristInfo As New List(Of TouristInfo) For Each result In From c In xmldoc.Descendants("spot") Select c With myTouristInfo .Add(New TouristInfo With {.name = result.Element("name").Value, .title = result.Element("title").Value, .description = result.Element("description").Value, .url = result.Element("url").Value}) End With Next GridView1.ItemsSource = myTouristInfo TitleTextBlock.Text = areaName& "の観光地" End Sub </pre> <h4>GridViewの項目が選択された時の処理</h4> <p>Frameを表示状態にします。<br> ComboBoxを選択不可とします。<br> 変数myUrlにGridViewから選択された項目を、TouristInfoクラスにキャストして、そのurlプロパティの値を取得し格納します。</p> <p>変数myUrlの値を引数にWebBrowserPageに遷移します。</p> <p>例外が発生した場合は、ComboBoxの選択を可能にし、Frameを非表示とします。</p> <pre class="brush: plain; " type="syntaxhighlighter"> Private Sub GridView1_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles GridView1.SelectionChanged Try myFrame.Visibility = Windows.UI.Xaml.Visibility.Visible ComboBox1.IsEnabled = False Dim myUrl As String = DirectCast(GridView1.SelectedItem, TouristInfo).url myFrame.Navigate(GetType(WebBrowserPage), myUrl) Catch ComboBox1.IsEnabled = True myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed End Try End Sub </pre> <h4>戻る(←)アイコンがタップされた時の処理</h4> <p>ComboBoxの使用を可能とし、Frameを非表示にします。</p> <pre class="brush: plain; " type="syntaxhighlighter"> Private Sub backButton_Click(sender As Object, e As RoutedEventArgs) Handles backButton.Click ComboBox1.IsEnabled = True myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed End Sub End Class </pre> <p>次に、ソリューションエクスプローラー内のWebBrowserPage.xamlを展開して表示される、WebBrowserPage.xaml.vbをダブルクリックしてリスト4のコードを記述します。</p> <h3>ロジックコードを記述する</h3> <h4>リスト4 (WebBrowserPage.xaml.vb)</h4> <pre class="brush: plain; " type="syntaxhighlighter">Option Strict On Public NotInheritable Class WebBrowserPage Inherits Page </pre> <h4>ページがアクティブになった時の処理</h4> <p>MainPage.xamlから渡された引数(myUrl)は、e.Parameterで取得できます。これはObject型であるため、DirectCastでString型にキャストして、変数myUriに格納します。</p> <p>WebBrowserのSourceプロパティにmyUriの値を指定します。これでWebBrowser内に、該当する観光地の情報が表示されます。</p> <pre class="brush: plain; " type="syntaxhighlighter"> Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Dim myUri As String = DirectCast(e.Parameter, String) WebBrowser1.Source = New Uri(myUri, UriKind.Absolute) End Sub End Class </pre> <p>今回でこの連載は終了です。長い間おつきあいありがとうました。<br> 次回の連載も、ぜひ楽しみに待っていてくだされば嬉しいです。</p> <h3>筆者からのお知らせ</h3> <p>筆者はWindowsストアでアプリを公開しています。チャームの検索からWindowsストアを選択して、検索欄に、kuniyasuまたはYakushijiKuniyasuと入力すると、公開されているアプリの一覧が表示されます。上記はどちらも私のアカウントですので、興味のある方は是非ダウンロードして使ってみてください。</p> </body></html>

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored