Как передать переменную из внешнего потока в Android Compose

Есть приложение на Kotlin с использованием Android Jetpack Compose. Имеются переменные:

var weather : String = ""
var main : String = ""
var wind : String = ""
var clouds : String = ""
var dt : String = ""
var sys : String = ""
var name : String = ""
var coord : String = ""
var info : String = ""

Есть поток в котором эти переменные получают значения:

class WeatherData() : AsyncTask<String, Void, String>() {
        override fun doInBackground(vararg params: String?): String {
            return URL("https://api.openweathermap.org/data/2.5/weather?q=$City&units=metric&appid=$ID&lang=$Lang").readText(
                Charsets.UTF_8
            )
        }

        override fun onPostExecute(DataString: String?) {
            super.onPostExecute(DataString)
            println(DataString)
            val DataJSON = JSONObject(DataString)

            weather = DataJSON.getJSONArray("weather").getJSONObject(0).getString("description").toString()
            main = DataJSON.getJSONObject("main").getString("temp").toString()
            wind = DataJSON.getJSONObject("wind").getString("speed").toString()
            clouds = DataJSON.getJSONObject("clouds").toString()
            dt = DataJSON.getInt("dt").toString()
            sys = DataJSON.getJSONObject("sys").toString()
            name = DataJSON.getString("name").toString()
            coord = DataJSON.getJSONObject("coord").toString()
        }
    }

Интерфейс:

@ExperimentalGraphicsApi
@Composable
fun Greeting() {
    Box(
        modifier = Modifier
            .background(
                brush = Brush.linearGradient(
                    listOf(
                        Color.hsl(254F, 0.98F, 0.62F),
                        Color.hsl(215F, 0.98F, 0.53F),
                        Color.hsl(189F, 1F, 0.48F)
                    )
                )
            )
            .fillMaxSize()
    ) {
        Column(
            horizontalAlignment = Alignment.CenterHorizontally,
            modifier = Modifier.fillMaxSize()
        ) {
            Text(
                name,
                style = TextStyle(
                    fontSize = 25.sp,
                    color = Color.White,
                    fontFamily = FontFamily.SansSerif,
                    fontWeight = FontWeight.Light,
                ),
                modifier = Modifier.padding(24.dp),
            )
            Text(
                "$main°",
                style = TextStyle(fontSize = 80.sp, color = Color.White),
                modifier = Modifier.padding(0.dp, 190.dp, 0.dp, 0.dp)
            )
            Text("", style = TextStyle(fontSize = 20.sp, color = Color.White))
            Text(
                "(-19°)",
                style = TextStyle(fontSize = 18.sp, color = Color.White),
                modifier = Modifier.padding(0.dp, 5.dp, 0.dp, 10.dp)
            )
            Text(
                "$weather",
                style = TextStyle(fontSize = 20.sp, color = Color.White),
                modifier = Modifier.padding(0.dp, 190.dp, 0.dp, 0.dp)
            )
        }
    }

}

Как мне правильно передать в интерфейс переменные чтобы они отобразились?


Ответы (0 шт):