AndroidStudio: エミュレーターからローカルPC(localhost)で動かしているWebAPIに接続する[kotlin]

プログラミング
スポンサーリンク




こんにちは、Eviです。

AndroidStudioでアプリケーションを作っていると、例えばエミュレーターをクライアント、ローカルPCをサーバに見立てて、通信のテストを行いたい時があります。

今回は、そういった場合にどうすればいいかを、解説していきたいと思います。

スポンサーリンク

やること

AndroidStudioのエミュレーター から、ローカルPCで動かしているDBアクセスを行うWebAPI(詳細は、下記リンク先ページをご覧ください)にアクセスし、データを取得して表示する。

※記事を見たくない、見る時間がない方へ

http://127.0.0.1:5000/getにアクセスすると、テーブル内のデータ一覧をJSON形式で返却するWebAPIです。

やり方

WebAPIを起動する

予めWebAPIを起動しておきます。

この状態でhttp://127.0.0.1:5000/getにアクセスすると、DBにJSONの内容が表示されます。

↓例

AndroidStudioからWebAPIにアクセスするためのURLを生成する

先ほどのURL: http://127.0.0.1:5000/getをそのままAndroidStudioで使用しても、WebAPIにアクセスすることはできません。

なぜなら、URL中のIPアドレス[127.0.0,1]は、ループバックアドレス(自分自身を指すIPアドレス)であり、エミュレーター で使用するとエミュレーター自身にアクセスしてしまうからです。

これを解決するには、URLのIPアドレスを[127.0.0.1]から[10.0.2.2]に変更する必要があります。

↓参考

Set up Android Emulator networking  |  Android Developers
The emulator provides versatile networking capabilities that you can use to set up complex modeling and testing environments for your app.

↓生成したURL

http://10.0.2.2:5000/get

エミュレーターからWebAPIにアクセスする

下記のメソッドを、ボタンイベント等に紐づけてやることで、WebAPIにアクセスして、JSONデータを取ってくることができます。

今回は、取ってきたデータをprintlnでコンソールに表示しています。

※ListViewで画面に表示したかったのですが、

"http://10.0.2.2:5000/get".httpGet().response { request, response, result ->
     when (result) {
        is Result.Success -> {
            println(String(response.data))
        }
        is Result.Failure -> {
            println("APIとの通信に失敗しました。")
        }
    }
}

おすすめの書籍

Androidアプリ開発の教科書

参考文献

KotlinでHTTP通信(FuelとHttpURLConnection) - Qiita
検証環境 この記事の内容は、以下の環境で検証しました。 Intellij IDEA ULTIMATE 2017.2 Kotlin 1.1.61 Fuel 1.12.0 Java 1.8 Gradle Projectで作成 ...
Android Emulatorでの「Cleartext HTTP traffic not permitted」エラー対策【メモ】
概要サーバーサイドのAPIと通信するAndroidアプリの開発中、ローカルでAPIサーバーを起動してアプリから接続しようとしたところ、次のエラーが発生しました。Cleartext communication to 10.0.2.2 not

コメント

タイトルとURLをコピーしました