Help us understand the problem. What is going on with this article?

Xamarin for VisualStudioでHTTP GET

More than 3 years have passed since last update.

この記事でやること

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

参考にしたサイト

https://developer.xamarin.com/guides/cross-platform/advanced/async_support_overview/

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした