はじめに
学習記録。
Android開発で外部サーバーのCSVファイルやJSONを参照するためにHTTP通信を行う必要があったのでメモとして残す。
前提
アプリをインターネットに接続する許可を与えるためmanifestタグ内に以下2つのタグを追加。
AndroidManifest.xml
<manifest …>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
//以下省略
実装
fun startHttpRequest() {
// URLオブジェクトを作成
val url = URL("参照するURL")
// HttpURLConnectionオブジェクトを取得
val connection = url.openConnection() as? HttpURLConnection
connection?.let {
try {
// 接続に使用する時間を設定(ミリ秒単位)
it.connectTimeout = 2000
// データ取得に使用する時間を設定(ミリ秒単位)
it.readTimeout = 2000
// HTTPリクエストメソッドの設定
it.requestMethod = "GET"
// 接続
it.connect()
// HttpURLConnectionオブジェクトからレスポンスデータを取得
val stream = it.inputStream
stream.close()
} catch (ex: SocketTimeoutException) {
Log.w(DEBUG_TAG, "通信タイムアウト", ex)
}
// // HttpURLConnectionオブジェクト解放
it.disconnect()
}
}
これでHTTP通信を行い、レスポンスを取得することができる。あとはレスポンスデータを加工する処理を追加して使用すれば良い。
注意点
通信処理をメインスレッドで行ってしまうとエラーが発生してしまうため、こちらの処理はワーカースレッドで行う必要があります。
実際開発の際も、こちらの処理はCoroutineを使用した非同期処理で実装をしていました。
参考
https://developer.android.com/reference/java/net/HttpURLConnection
https://toronavi.com/connection-httpurlconnection