この記事でやること
VS2015でHTTP通信(GETリクエスト)できるAndroidアプリを作る
開発環境
IDE:VisualStudio2015 Community
言語:C#
その他:Xamarin.Androidを使う
とりあえずソースコード
MainActivityクラスの中身
string httpGetTag = "HTTP GET";
protected override void OnCreate( Bundle bundle )
{
base.OnCreate( bundle );
HttpGet( "http://www3.city.sabae.fukui.jp/xml/refuge2/refuge2.xml" ); // 鯖江のオープンデータ
}
private async void HttpGet( string url )
{
// HttpClient
HttpClient httpClient = new HttpClient();
// GET
Stream stream = await httpClient.GetStreamAsync( url );
// Streamで処理
StreamReader sr = new StreamReader( stream );
while ( !sr.EndOfStream )
Log.Debug( httpGetTag, sr.ReadLine() );
}
}
HttpClientを使うために
デフォルトではHttpClientを扱えないので、
[ソリューションエクスプローラ]の[参照]を右クリックして、
[参照の追加]→[System.Net.Http]にチェックを付けて、下を追加
using System.Net.Http;
ソースコードの解説
HttpGet関数の引数に、任意のURL(URI)をぶちこめば、それをDLしてくれる
なんで非同期処理になってるのか
Androidの場合、メインスレッドでHTTP通信ができないようになっているので、
通信部分は別スレッド(つまり非同期)で処理しなければならない
なので、async、awaitなどの非同期処理に関するキーワードが出てきている
簡単にasync、awaitの説明をしておくと、
まず、中身で非同期処理を実行する関数の定義に、「async」というキーワードをつける
これで、その関数の中で「await」を使うことができるようになる
で、「await」は、非同期で何か処理をする関数の前につける演算子
非同期処理の関数の呼び出しには、かならずこれをつける必要がある
非同期処理の関数が呼ばれると、1回その関数を呼び出した関数の外に抜ける(ここでいうと、HttpGet関数から抜け、OnCreate関数に戻ってくる)
と同時に、別スレッドが生成され、HTTP通信でデータのやり取りが始まる
非同期関数の処理が終われば、HttpGet関数の中で、次のプログラムに進んでいく
詳しくはMSDN参照。図がとてもわかり易い
Async および Await を使用した非同期プログラミング (C# および Visual Basic)
Streamについて
Streamとは、ファイルやメモリなどとデータをやり取りするためのクラスで、
ユーザは、直接ファイルを操作するのではなく、このStreamを介して操作する
このプログラムでは、HTTP通信の関数が、Streamを返してくるので、
それを、StreamReaderに変換して、データを1行ずつ読み込んで出力している