LoginSignup
3
4

More than 5 years have passed since last update.

Xamarin for VisualStudioでHTTP GET

Last updated at Posted at 2016-03-08

この記事でやること

VS2015でHTTP通信(GETリクエスト)できるAndroidアプリを作る

開発環境

IDE:VisualStudio2015 Community
言語:C#
その他:Xamarin.Androidを使う

とりあえずソースコード

MainActivityクラスの中身

MainActivity.cs
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]にチェックを付けて、下を追加

MainActivity.cs
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行ずつ読み込んで出力している

ソースコードでDLしているデータ

データシティ鯖江(避難所、一時避難所等(XML))

参考にしたサイト

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4