Androidアプリ開発入門 (10) - OkHttp
「OkHttp」の使い方をまとめました。
・API 29: Android 10 (Q)
・OkHttp 4.9.0
前回
1. OkHttp
「OkHttp」は、シンプルで効率的なHTTPクライアントです。
2. OkHttpのインストール
モジュールのbuild.gradleに以下を追加します。
implementation "com.squareup.okhttp3:okhttp:4.8.0"
3. AndroidManifest.xml
◎ android.permission.INTERNET
通信を行うので、以下のパーミッションを追加します。
<uses-permission android:name="android.permission.INTERNET" />
◎ cleartextTrafficPermitted
「Android P」から、暗号化されていない(HTTPSでない)HTTP通信が、デフォルトで制限されています。動作確認のためHTTP通信を行いたい場合は、applicationタグにcleartextTrafficPermitted="true"を追加します。
<application
android:usesCleartextTraffic="true"
4. GETのHTTP通信
GETによるHTTP通信のコードは、次のとおりです。
// GETのリクエストの生成
val request = Request.Builder()
.url("http://192.168.11.5/login?username=hoge&password=1234")
.build()
// GETによるHTTP通信
val client = OkHttpClient()
client.newCall(request).enqueue(object : Callback {
// 成功時に呼ばれる
override fun onResponse(call: Call, response: Response) {
Log.d("debug", response.body!!.string())
}
// 失敗時に呼ばれる
override fun onFailure(call: Call, e: IOException) {
Log.d("debug", e.toString())
}
})
動作確認用のFlaskサーバーのコードは、次のとおりです。
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
@app.route('/login', methods=['GET'])
def login():
result = ''
if request.method == 'GET':
result += 'GET, '
result += 'username:'+request.args.get('username', '')+', '
result += 'password:'+request.args.get('password', '')+', '
return result
if __name__ == "__main__":
app.run(debug=False, host='0.0.0.0', port=80)
5. POSTのHTTP通信
POSTによるHTTP通信のコードは、次のとおりです。
// POSTのリクエストの生成
val body = FormBody.Builder()
.add("username", "hoge")
.add("password", "1234")
.build()
val request = Request.Builder()
.url("http://192.168.11.5/login")
.post(body)
.build()
// POSTによるHTTP通信
val client = OkHttpClient()
client.newCall(request).enqueue(object : Callback {
// 成功時に呼ばれる
override fun onResponse(call: Call, response: Response) {
Log.d("debug", response.body!!.string())
}
// 失敗時に呼ばれる
override fun onFailure(call: Call, e: IOException) {
Log.d("debug", e.toString())
}
})
動作確認用のFlaskサーバーのコードは、次のとおりです。
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
@app.route('/login', methods=['POST'])
def login():
result = ''
if request.method == 'POST':
result += 'POST, '
result += str(request.get_data())
return result
if __name__ == "__main__":
app.run(debug=False, host='0.0.0.0', port=80)
【おまけ】 URLエンコードとURLデコード
val plainText = "これはテストです"
// URLエンコード
val encodeText = URLEncoder.encode(plainText, "UTF-8")
Log.d("debug","encodeText: "+encodeText)
// URLデコード
val decodeText = URLDecoder.decode(encodeText, "UTF-8")
Log.d("debug","decodeText: "+decodeText)
次回
この記事が気に入ったらサポートをしてみませんか?