【Android】定期的にサイト情報を取得3 
~サイトにGETリクエスト~

前回の続きです。

「GET」をプログラミングしていきます。

まず、「GET」を実現するために、「HttpURLConnection」を使用します。

「MainActivity」の「onCreate」に以下のように記述してみます。

// URLの設定
val url = URL(“https://サイトURL”)
val connection = url.openConnection() as HttpURLConnection
// レスポンスを取得
val responseStream = InputStreamReader(connection.inputStream)
val br = BufferedReader(responseStream)
val sb = StringBuilder()
for(line in br.readLines()){ // すべてをまとめる
    sb.append(line)
}
val body = sb.toString()

上記ソースを実行すると、エラー「NetworkOnMainThreadException」が発生しました。。

どうやら、HTTP通信は非同期処理をしなければいけないとのこと。

そこで、定期的に実行する実装も兼ねて、Timerを使いたいと思います。

以下のようにソースを修正します。

Timer().scheduleAtFixedRate( object : TimerTask() {
override fun run() {
    // URLの設定
    val url = URL(“https://サイトURL”)
    val connection = url.openConnection() as HttpURLConnection
    // レスポンスを取得
    val responseStream = InputStreamReader(connection.inputStream)
    val br = BufferedReader(responseStream)
    val sb = StringBuilder()
    for(line in br.readLines()){ // すべてをまとめる
        sb.append(line)
    }
    val body = sb.toString()
    
}
}, 0, 60000)//1分に1回起動させる

そうするとエラー「Permission denied (missing INTERNET permission?)」が発生します。

これは権限の問題なので、以下の文言を「AndroidMainfest.xml」に追加しましょう。

<uses-permission android:name=”android.permission.INTERNET”>
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”>

以下のような感じになります。

もう一度実行してみましょう。

そうすると、body(sb.toString())の中に前回取得したようなHTMLが入っているはずです。

これで、HTMLを取得するところまでプログラムで記述できました。

「正規表現」までプログラミングしたかったですが、次回に持ち越します。