OkHttpClient(Android)

今度は、AndroidでOkHttpしてみる。

OkHttpを初めて使ってみた話 - Qiita

プロジェクトを作成
プロジェクトを作成

プロジェクトを作成。

implementation 'com.squareup.okhttp3:okhttp:4.6.0'だけでいいのか。

android.permission.INTERNETを追加。

idとしてtextview1を追加。

メインスレッドでやると落ちるので、AsyncTaskじゃないと。

mTaskをexecute。

レスポンス返ってきた。
レスポンス返ってきた。

レスポンス返ってきた。

Sample/okhttp/OkHttpClient/OkHttpClient_android/OHC/OHC_ at master · bg1bgst333/Sample · GitHub

Volley.newRequestQueue

GoogleのネットワークライブラリVolleyを扱う。

GitHub - google/volley
Volley overview  |  Android Developers
ネットワーク通信用ライブラリVolleyを使いこなす | TechBooster
androidで、通信ライブラリのvolleyを使うことになったので、個人的メモ - Qiita

Volley.newRequestQueueでリクエストキューを作成する。

プロジェクト作成
プロジェクト作成

プロジェクト作成したら、

build.gradleにVolleyを追加。

AndroidManifest.xmlandroid.permission.INTERNETを追加。

activity_main.xmlのTextViewにidとしてtextview1を追加。

queueにrequestを追加することで投げられる。

レスポンス返ってきた。
レスポンス返ってきた。

レスポンス返ってきた。

Sample/volley/Volley/newRequestQueue/Volley/Volley_ at master · bg1bgst333/Sample · GitHub

OkHttpClient

サードパーティーでは定評のある、Square社のOkHttpを扱う。

OkHttp v3.8.0 jar( と okio 1.13.0.jar ) を Eclipse のプロジェクトに追加して一般的な POST 送信を行う : logical error

ここを見ると、

OkHttp

ここからjarをダウンロードできるらしいが、現在はjarでダウンロードできそうなリンクが無い・・・。
色々探したら、

Maven Repository: com.squareup.okhttp3 » okhttp » 4.6.0

MavenのRepositoryにあったので、ここのFilesからjarをダウンロードする。

Maven Repository: com.squareup.okio » okio

依存するOkioのjarと、

Maven Repository: org.jetbrains.kotlin » kotlin-stdlib

Kotlin Standard Libraryのjarもダウンロードする。

libフォルダを掘って、下にjarを置く。
libフォルダを掘って、下にjarを置く。

libフォルダを掘って、下にjarを置く。

jarを追加する
jarを追加する

jarを追加する。

OkHttpを初めて使ってみた話 - Qiita
OkHttp 3.14.0 API

を参考に、

こうすると、

レスポンス返ってくる。
レスポンス返ってくる。

レスポンス返ってくる。

Sample/okhttp/OkHttpClient/OkHttpClient/src/OkHttpClient at master · bg1bgst333/Sample · GitHub

AndroidHttpClient

Androidの場合、かつてはAndroidHttpClientを使って、HTTP処理を行う場合もあった。

AndroidHttpClientのサンプルを書いた - Android/iPhoneたわむれ日々

strings.xmlで、

"textview1_text"を追加。
activity_main.xmlで、

LinearLayoutにした上で、中のTextViewにidとして"textview1"を追加し、textは"textview1_text"。
今回はAsyncTaskを使う。
CustomAsyncTask.javaで、

AndroidHttpClientで、httpClientをつくる。
レスポンスのテキストをtextView1にセット。
MainActivity.javaで、

onCreateで、"http://bgstation0.com/"を渡してexecute。

レスポンスのテキストがtextView1にセットされた
レスポンスのテキストがtextView1にセットされた

レスポンスのテキストがtextView1にセットされた。

Android 6.0でApache HTTP Clientが削除されました。 - リスクファインダーブログ

まあ、こちらも5.1で削除されているので使えないが。

Sample/android/AndroidHttpClient/AndroidHttpClient/src/AndroidHttpClient at master · bg1bgst333/Sample · GitHub

CloseableHttpClient

Javaでは、標準でHttpURLConnectionが用意されているが、それ以外でよく使われるHttpClientライブラリというと、Apache HttpComponentsがある。

Apache HttpComponents – Apache HttpComponents

CloseableHttpClientでGETリクエストを投げてみる。

CloseableHttpClient (Apache HttpClient 4.5.12 API)

srcと同じ位置にlibフォルダを掘る
srcと同じ位置にlibフォルダを掘る

srcと同じ位置にlibフォルダを掘る。

HttpClientだけでよさそうなので落としたzipをここで展開。
HttpClientだけでよさそうなので落としたzipをここで展開。

HttpClientだけでよさそうなので

Apache HttpComponents – HttpComponents Downloads

で落としたzipをここで展開。

これを切り取って
これを切り取って

これを切り取って、

さっきのlibの下に置く
さっきのlibの下に置く

さっきのlibの下に置く。
展開時の残ったフォルダなどは削除して、プロジェクトを起動。

リフレッシュすると
リフレッシュすると

リフレッシュすると、

こんな感じだったのねと確認
こんな感じだったのねと確認

こんな感じだったのねと確認。

プロパティで
プロパティで

プロパティで、

jarの追加
jarの追加

jarの追加。

下のlibのjarを全部追加
下のlibのjarを全部追加

下のlibのjarを全部追加。

こんな感じで読み込めた
こんな感じで読み込めた

こんな感じで読み込めた。
あとは、MainClass.javaを書いていく。

"http://bgstation0.com"へのGETリクエストを作成して投げる。

実行すると、こういうのが出るので、MainClassを選択
実行すると、こういうのが出るので、MainClassを選択

実行すると、こういうのが出るので、MainClassを選択。

成功した
成功した

成功した。

Sample/apachehc/CloseableHttpClient/CloseableHttpClient/src/CloseableHttpClient at master · bg1bgst333/Sample · GitHub

AndroidSchedulers.mainThread

AndroidでRxJavaを使う場合、通知処理などUIを触る処理はAndroidのUIスレッド(メインスレッド)で行わないと、落ちてしまう。
そういう場合はobserveOnに、RxAndroidのAndroidSchedulers.mainThreadをセットする。

AndroidSchedulers - rxandroid 1.2.1 javadoc

いちばん上のStart a new ~
いちばん上のStart a new ~

いちばん上のStart a new ~。

Empty
Empty

Empty。

あとこんな感じ
あとこんな感じ

あとこんな感じ。
プロジェクト出来たら、

build.gradleに、RxJavaとRxAndroidの分を書いておく。
ビルド時などに勝手にダウンロードされて読み込まれる。

TextViewにtextview1というIDを付けているぐらい。
あとは、MainActivity.javaを書いていく。

TextViewのテキストが3秒ごとに切り替わるようになっている。
subscribeOnはSchedulers.newThreadだが、observeOnはAndroidSchedulers.mainThreadにする。

最初は"aaa"
最初は"aaa"

最初は"aaa"。

3秒後に"bbb"
3秒後に"bbb"

3秒後に"bbb"。

さらに3秒後に"ccc"に変わる
さらに3秒後に"ccc"に変わる

さらに3秒後に"ccc"に変わる。

Sample/rxandroid/AndroidSchedulers/mainThread/AS/AS_ at master · bg1bgst333/Sample · GitHub

Schedulers.newThread

Schedulers.newThreadは、新しいスレッドで実行する。

Schedulers (RxJava Javadoc 1.3.8)

実行すると、

[1]:id = 1, name = main
[3]:id = 1, name = main
[2]:id = 11, name = RxNewThreadScheduler-1
[4]:id = 11, name = RxNewThreadScheduler-1
1
[4]:id = 11, name = RxNewThreadScheduler-1
2
[4]:id = 11, name = RxNewThreadScheduler-1
3
Completed!
[5]:id = 1, name = main

RxNewThreadScheduler-1と出ている。

Sample/rxjava/Schedulers/newThread/src/Schedulers at master · bg1bgst333/Sample · GitHub