Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@hhyuga201515

Xamarin for VisualStudioでHTTP GET

この記事でやること

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))

参考にしたサイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?