yumemi-inc / android-training-template

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Composeで天気予報を表示する

Seo-4d696b75 opened this issue · comments

🌤️ APIから天気予報を取得して画面に表示します

Note

Required(先に完了させましょう)

Important

天気予報をAPIから取得する実装は作成済みコードを利用できます
ご自身で実装する余裕がない場合は活用してください

課題内容

  • APIで天気予報を取得する
  • 天気予報の取得中はProgressBarを表示する
  • 天気予報を詳細画面に表示する
  • 天気予報の取得に失敗したらダイアログを表示する(表示項目はメイン画面と同様)
    • Relaodボタンをタップすると、ダイアログを閉じ天気予報を再取得する
    • Closeボタンをタップすると、ダイアログを閉じメイン画面に戻る

これまで学んできた知識を活用して天気予報を表示しましょう

利用するAPI

OpenWeatherMapの5 day weather forecastを利用します。指定した地点の向こう5日間の天気情報を3時間ごとに取得できます。API keyの取得、地点の指定、レスポンスの表記方法の指定などは以前の課題 #22 を参照してください。

動作イメージ

参考資料

作成済みのコードを利用する

APIから天気予報を取得する実装は作成済みコードを利用できます

template/api-weather-forecastブランチをmainまたは作業ブランチにmergeしてください

API keyの指定

OpenWeatherMapから取得したAPI keyを記載したapi/apikey.propertiesファイルを追加します
(ファイルは.gitignoreに指定されているのでGitHub上に公開されません)

api_key="your_api_key"

API Serviceの初期化

特にパラメータを指定しなければapi/apikey.propertiesで指定したAPI keyを利用します

val weather = YumemiWeather()

利用する関数

YumemiWeather

   suspend fun fetchJsonForecastAsync(json: String) : String
  • ランダムにエラーが発生してUnknownExceptionをthrowします
  • Requestで指定した都市の天気予報をJSON形式の文字列で返します
  • Requestで指定した都市が既知の都市ID一覧に含まれない場合はIllegalArgumentExceptionをthrowします
都市ID一覧
都市名 id country
札幌 2128295 JP
釧路 2129376 JP
仙台 2111149 JP
新潟 1855431 JP
東京 1850144 JP
名古屋 1856057 JP
金沢 1860243 JP
大阪 1853909 JP
広島 1862415 JP
高知 1859146 JP
福岡 1863967 JP
鹿児島 1860827 JP
那覇 1856035 JP
New York 5128581 US
London 2643743 GB

Request

WeatherRequest

Key フォーマット
area String 都市名 東京
date String ISO8601拡張形式 "yyyy-MM-dd'T'HH:mm" 2020-04-01T12:00

Response

ForecastResponse

Key フォーマット
list List<ForecastPoint> -- --
area String requestと同じ 東京

ForecastPoint

Key フォーマット
weather String sunny, cloudy, rainy, snow sunny
temperature Int -- 20
date String ISO8601拡張形式 "yyyy-MM-dd'T'HH:mm" 2020-04-01T12:00