やること
Fuelでhttpでapi叩いて取得したjsonの中身を取得したい
open-meteoでHTTP GETし、東京の現在の天気を取得する
東京の現在の気温を別の画面に渡す
実装
プロジェクトのbuild.gradle
シリアライズ関係のプラグイン追加
plugins {
id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.20'
}
モジュールのbuild.gradle
シリアライズ関係をpluginに追加
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlinx-serialization'
}
dependenciesにFuel使うための宣言追加
dependencies {
// Fuel library
implementation 'com.github.kittinunf.fuel:fuel:2.3.1'
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2'
}
.ktに実装
import kotlinx.serialization.* import kotlinx.serialization.json.* import com.github.kittinunf.fuel.httpGet import com.github.kittinunf.result.Result
@Serializable
data class CurrentWheather(
@SerialName("temperature") val temperature : Double,
@SerialName("windspeed") val windspeed : Double,
@SerialName("winddirection") val winddirection : Double,
@SerialName("weathercode") val weathercode : Int,
@SerialName("time") val time : String
)
@Serializable
data class Weather(
@SerialName("latitude") val latitude : Double,
@SerialName("longitude") val longitude : Double,
@SerialName("generationtime_ms") val generationtime_ms : Double,
@SerialName("utc_offset_seconds") val utc_offset_seconds : Int,
@SerialName("timezone") val timezone : String,
@SerialName("timezone_abbreviation") val timezone_abbreviation : String,
@SerialName("elevation") val elevation :Double,
@SerialName("current_weather") val current_weather : CurrentWheather
)
以下のコードをどこかで実装
https://api.open-meteo.com/v1/forecast?latitude=35.6785&longitude=139.6823¤t_weather=true
で東京の現在の天気を取得
val httpAsync = "https://api.open-meteo.com/v1/forecast?latitude=35.6785&longitude=139.6823¤t_weather=true"
.httpGet()
.responseString { request, response, result ->
when (result) {
is Result.Failure -> {
val ex = result.getException()
}
is Result.Success -> {
val data = result.get()
Log.e("MyApp", data)
try {
// ★weatherに天気のデータが入る
val wheather = Json.decodeFromString<Weather>(data)
val intent = Intent(this, MainActivity3::class.java)
//intent変数をつなげる(第一引数はキー,第二引数は渡したい変数)
intent.putExtra("SOMEKEY", wheather.current_weather.temperature.toString())
//追加画面の起動
startActivity(intent)
finish()
}catch(e: Exception){
Log.e("MyApp", e.toString())
}
}
}
}


コメント