やること
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()) } } } }
コメント