連載 :
Windows Phone Tips集データを保存し表示した電話番号に電話する
2011年10月28日(金)
ロジックコードを記述する
リスト2 (MainPage.xaml.vb)
Imports System.Xml.Linq Imports System.IO Imports System.Windows.Documents Imports System.Windows.Input Imports System.Windows.Media Imports System.Windows.Media.Animation Imports System.Windows.Shapes Imports Microsoft.Phone.Controls 電話の発信、メールを送信する写真を撮るなど、ユーザーに一連の一般的なタスクを提供するクラスの含まれる、Microsoft.Phone.Task名前空間をインポートします。PhoneCallTaskを使用するため、この名前空間が必要です。 Imports Microsoft.Phone.Tasks personalInfoクラス内に、文字列型の「氏名」、「電話」プロパティを定義しています。 Public Class personalInfo Property 氏名 As String Property 電話 As String End Class Partial Public Class MainPage Inherits PhoneApplicationPage XML要素を表すXElementクラス型のメンバ変数、myDocとreadXmlを宣言しています。 Dim myDoc As XElement Dim readXml As XElement ' Constructor Public Sub New() InitializeComponent() ' Set the data context of the listbox control to the sample data DataContext = App.ViewModel End Sub ' Load data for the ViewModel Items
ページが読み込まれた時の処理
サーバーからperonalInfo.xmlを読み込み、その内容を表示するDownLoadXmlDataプロシージャを実行します。 Private Sub MainPage_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded DownloadXmlData() End Sub
[OK]ボタンがクリックされた時の処理。
「氏名」や「電話」が未入力の場合は、警告メッセージを表示するErrorMessageプロシージャを実行します。 新しいWebClientのインスタンスmyWebClientオブジェクトを生成します。WebClientクラスは、データの送受信用のメソッドを提供するクラスです。 String またはUriとして指定したリソースをダウンロードする、DownloadStringAsyncメソッドで、サーバー上のpersonalInfo.xmlをダウンロードします。キャッシュから読み込まないように、常に新しいデータを読み込むよう、引数に現在の時間、分、秒を指定しています。 「サーバーのURI」には読者の利用しているサーバーにTelephone_NET(ASP.NET)ファイルをアップし、IISの設定を行ってください。 AddHandlerステートメントで、非同期のリソース ダウンロード操作の完了時に発生する、DwonloadStringCompletedイベントに、イベントハンドラを追加します。イベントハンドラ内では以下の処理を実行します。 XElement.Parseメソッドでダウンロードした結果を読み込みます。読み込んだ結果はmyDocメンバ変数に格納されます。 <情報>要素を生成し、子要素として<氏名>要素を生成し、内容テキストにnameTextBoxの値を指定します。次に<電話>要素を生成し、内容テキストにtelTextBoxの値を指定します。生成したXMLをAddメソッドでmyDocに追加します。 Private Sub okButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles okButton.Click ErrorMessage() Dim myWebClient As New WebClient AddHandler myWebClient.DownloadStringCompleted, Sub(resultSender As Object, resultArgs As DownloadStringCompletedEventArgs) If resultArgs.Error Is Nothing = False Then MessageBox.Show("XMLファイルが見つかりません") Exit Sub Else myDoc = XElement.Parse(resultArgs.Result) readXml = New XElement("情報", New XElement("氏名", nameTextBox.Text), New XElement("電話", telTextBox.Text)) myDoc.Add(readXml) End If End Sub myWebClient.DownloadStringAsync(New Uri(String.Format("サーバーのURI/Telephone_NET/SaveData/personalInfo.xml?myTime={0}", DateTime.Now.ToLongTimeString), UriKind.Absolute)) End Sub
[保存]ボタンがクリックされた時の処理
「氏名」や「電話」が未入力の場合は、警告メッセージを表示するErrorMessageプロシージャを実行します。 生成したXMLを変数saveXmlDataに格納しておきます。 新しいWebClientのインスタンスmyWebClientオブジェクトを生成します。WebClientクラスは、データの送受信用のメソッドを提供するクラスです。 EncodingプロパティにUTF8を指定し、HeadersのContent-Typeに”text/xml;charset=utf-8”と指定します。 UploadStringAsyncメソッドで、生成したXML(saveXmlDataの値)をサーバーにアップロードし、サーバー上のDefault.aspx(後ほど作成方法を解説)を実行します。アップするサーバーのURIは各自のURIに変更してください。UploadStringAsyncメソッドは、指定したリソースに指定した文字列(この場合、生成したXMLデータ)をアップロードします。引数に現在の時間、分、秒を指定し、常に新しいデータをアップロードします。 AddHanderステートメントで、非同期の文字列アップロード操作の完了時に発生する、UploadStringCompletedイベントに、イベントハンドラを追加します。イベントハンドラ内では、保存した旨のメッセージを表示し、サーバーからperonalInfo.xmlを読み込み、その内容を表示するDownLoadXmlDataプロシージャを実行します。[保存]ボタンの選択を不可とします。 ※サーバーに配置した、Telephone_NETのASP.NETファイルのアクセス許可やIISの設定等については、各自が行ってください。 Private Sub saveButton_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles saveButton.Click ErrorMessage() Dim saveXmlData As String saveXmlData = myDoc.ToString Dim myWebClient As New WebClient With myWebClient .Encoding = System.Text.Encoding.UTF8 .Headers("content-type") = "text/xml; charset=utf-8" End With AddHandler myWebClient.UploadStringCompleted, Sub(resultSender As Object, resultArgs As UploadStringCompletedEventArgs) MessageBox.Show("保存しました") DownloadXmlData() End Sub myWebClient.UploadStringAsync(New Uri(String.Format("サーバーのURI/Telephone_NET/Default.aspx?myTime={0}", DateTime.Now.ToLongTimeString), UriKind.Absolute), saveXmlData) nameTextBox.Text = String.Empty telTextBox.Text = String.Empty okButton.IsEnabled = True saveButton.IsEnabled = False End Sub
「データを保存し表示した電話番号に電話する」サンプルプログラム
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。