AndroidでHTTP通信して自作APIから値を取得する
経緯
AndroidでHTTP通信して自作APIから値を取得してみたメモ
参考
コピペする
そのまま何も考えずコピペ。ただし、1ファイルずつ https://github.com/suzukaze/RxAndroidSample
1.MainActivity.java
赤文字がいっぱい。一旦無視する。
2.res
3.AndroidManifest.xml
ユーザー認証追加。問題なさ気。
4.api,modelディレクトリ追加
- api/ServiceGenerator.java 赤文字いっぱい。
- api/EmpitomeBeamService.java 赤文字いっぱい。
- model/EpitomeBeam.java 赤文字いっぱい。
- model/EpitomeEntry.java 赤文字いっぱい。
# import部分を調整してみる
- package名が入ってるとこは com.ksyunnnn.apitest に 全体的に赤文字は減った
5.build.gradle
- app/build.gradle dependencies{}のみ追加してみる
一旦sync... 赤文字には関係ないのか…。
違った
ただのsyncじゃなく、 「sync with project gradle」を使わないとgradleの同期はしてなかった模様
同期したら赤文字なくなった!
動いた!
記事を理解する
通信部分をRxAndroidを使用して、リクエストし、レスポンスをパース後にUI操作の流れをわかりやすく記述する。リクエストについてはRetrofitによりRESTfulに記述し、Gsonによるレスポンスをパースした結果を定義することにより、面倒なパースを自動的にパースします。
出てきた単語 * RxAndroid => リクエスト,レスポンス * Gson => パース * Retrofit
RxAndroid
非同期通信をうまくなんやするライブラリ パース(構文解析)も行っている?
dependencies { compile 'io.reactivex:rxandroid:0.24.0' compile 'io.reactivex:rxjava:1.0.8' }
GSON
JSONデータとJavaオブジェクトを相互に変換するためのライブラリ
dependencies { ??? // compileなしでなぜかいけてる… }
Retrofit
インターフェースの定義のために必要そうなもの?
dependencies { compile 'com.squareup.retrofit:retrofit:1.9.0' }
OkHTTP
※文中にはないけど使ってる模様 HTTPクライアントのライブラリ。WebSocketに対応していて、同期/非同期のAPIを提供。
dependencies { compile 'com.squareup.okhttp:okhttp:2.3.0' }
脳みそ整理
- パース => 構文解析
構造を見ていく
RxAndroidによる通信
(1)リクエストしてレスポンスをパース(構文解析) subscribeOn(Schedulers.io())により、io用のスレッドで行う設定
(2)結果を受け取りUI操作 observeOn(AndroidSchedulers.mainThread())によりメインスレッドで行う設定
やんわりOKということにする
WebAPIを作ってみる
phpの
$resposnse = array( "user" => "俺", "id" => "hoge" ); json_encode($response);
で簡単に解決 json形式で吐き出した。
アプリから取得する
できない
できない理由
オブジェクトでパースしようとしてるのに 配列で返してるのがダメな原因らしい
結果
配列では受け取れないが、単体のオブジェクトとしては受け取れたので一旦良しとする。
ソースは下記の質問ページに記載してるので、ご参考に teratail.com