質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

受付中

Jetpack Composeのテキストに、Listに入っている要素を表示させたいが、やり方が分からない

konn_
konn_

総合スコア28

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

1回答

0リアクション

0クリップ

165閲覧

投稿2022/09/11 12:14

編集2022/09/12 06:23

前提

Jetpack Composeで、OpenWeatherMapのAPIを使用した天気予報アプリを制作しています。
その天気予報アプリでは、7日分の日にち、天気のアイコン、最高気温、最低気温を取得して表示させます。
そこで、疑問点のアドバイスや、技術に関するアドバイスを頂きたいです。

天気のアイコンを正常に表示させる処理や、日時がUNIXになっているのでその処理をしないといけないのですが、それはまだできていません。
また、非同期処理をしないとエラーが出るようなのでそれもこれからしようと思っています。

疑問点

・WeatherGetjsonクラスのweatherdataというリストに、7日分の情報(日時、天気など...)が全て入れているのですが、今のコードのままで要素を指定して取り出すことができるのか。(今のコードだと、TextにgetJson()が入っていて、リストのすべての情報を一括して表示させることしかできない。)

・WeatherScreenクラスの各テキストに、上記weatherdataリストの各要素を表示させたいのですが、WeatherScreen クラスに、weatherdataリストをもっていくのか、getJsonをもっていくのか、そしてどのように持っていくことができるのかが分からないです。(そもそも持っていくという表現が正しくないと思うのですが...)

該当のソースコード

WeatherScreen.ktと、WeatherGetjson.ktの2つのファイルを使用しています。
WeatherScreeクラスには、Jetpack Composeで、天気を表示させる画面のUIを完成させました。

WeatherScreen

package com.example.weatherapp import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.weatherapp.ui.theme.WeatherAppTheme @Composable fun WeatherDisplay() { Column( modifier = Modifier .padding(all = 8.dp) .background(color = MaterialTheme.colors.background) ) { Box( modifier = Modifier .background( color = MaterialTheme.colors.primaryVariant, shape = RoundedCornerShape(15) ) .padding(start = 20.dp, top = 10.dp, end = 20.dp, bottom = 20.dp) .fillMaxWidth() .requiredHeight(150.dp) ) { Row { Column { Text( text = "日にち", color = MaterialTheme.colors.surface, fontSize = 30.sp ) Spacer(modifier = Modifier.height(4.dp)) Image( painter = painterResource(R.drawable.hitu), contentDescription = "weather pictures ", modifier = Modifier.size(120.dp) ) } Spacer(modifier = Modifier.width(50.dp)) Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center ) { Text( text = "20/11", fontSize = 50.sp, color = MaterialTheme.colors.surface ) Text( text = "50%", fontSize = 50.sp, color = MaterialTheme.colors.surface ) } } } Spacer(modifier = Modifier.height(30.dp)) Column( modifier = Modifier .verticalScroll(rememberScrollState()) ) { Row( Modifier.padding(bottom = 30.dp) ) { Text( text = getJson(), Modifier.weight(1f), fontSize = 20.sp, fontWeight = FontWeight.Bold ) Image( painter = painterResource(R.drawable.hitu), contentDescription = "weather pictures ", Modifier.weight(1f) ) Text(text = "18/11", Modifier.weight(1f), fontSize = 20.sp) Text(text = "30%", Modifier.weight(1f), fontSize = 20.sp) } } } } @Preview @Composable fun weatherDisplayPreview() { WeatherAppTheme { WeatherDisplay() } }

WeatherGetjsonクラスでは、Jsonを取得して、listの中に入れることができました。

WeatherGetjson

package com.example.weatherapp import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.json.JSONException import org.json.JSONObject import java.io.BufferedReader import java.io.IOException import java.io.InputStreamReader import java.net.URL class WeatherGetjson() { } suspend fun weatherTask() { val apiKey = " //APIKey" val apiUrl = "https://api.openweathermap.org/data/2.5/onecall?lat=35.68&lon=139.70&exclude=current,minutely,hourly,alerts&appid=${apiKey}" GlobalScope.launch { val result = weatherBackgroundTast(apiUrl) weatherJsonTask(result) } } private suspend fun weatherBackgroundTast(apiUrl: String): String { val response = withContext(Dispatchers.IO) { var weatherdata = "" try { val url = URL(apiUrl) val br = BufferedReader(InputStreamReader(url.openStream())) val str = br.readText() } catch (e: IOException) { e.printStackTrace() } catch (e: JSONException) { e.printStackTrace() } return@withContext weatherdata } return response } private fun weatherJsonTask(result: String) { //取得した情報をしまう var list: ArrayList<String> = arrayListOf() val json = JSONObject(result) val weatherAry = json.getJSONArray("daily") for (i in 0..7) { val weatherObj = weatherAry.getJSONObject(i) var temp = weatherObj.getJSONObject("temp") var weather = weatherObj.getJSONArray("weather") var weatherToObj = weather.getJSONObject(0) var date = weatherObj.get("dt") var icon = weatherToObj.get("icon") var pop = weatherObj.get("pop") var min = temp.get("min") var max = temp.get("max") list += (arrayListOf(date, icon, pop, min, max).toString()) } }

試したこと

・Googleにて解決法を探った。
・それでも解決しなかったので、WeatherScreenのテキストにいろいろな文字を当てはめた

もしよろしければアドバイスよろしくお願いします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。