main #24
@ -4,13 +4,23 @@ import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import ru.vendetti.bitcoin_summarizer.ui.theme.BitcoinSummarizerTheme
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
@ -19,29 +29,59 @@ class MainActivity : ComponentActivity() {
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
BitcoinSummarizerTheme {
|
||||
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
|
||||
Greeting(
|
||||
name = "Android",
|
||||
modifier = Modifier.padding(innerPadding)
|
||||
)
|
||||
}
|
||||
CryptoScreen()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
Text(
|
||||
text = "Hello $name!",
|
||||
modifier = modifier
|
||||
)
|
||||
fun CryptoScreen() {
|
||||
// Создаем репозиторий для работы с API
|
||||
val cryptoRepository = remember { CryptoRepository(RetrofitClient.apiService) }
|
||||
|
||||
// Состояния для хранения результатов запросов
|
||||
var bitcoinTicker by remember { mutableStateOf("Загрузка Bitcoin Ticker...") }
|
||||
var globalData by remember { mutableStateOf("Загрузка глобальных данных...") }
|
||||
var fearGreedData by remember { mutableStateOf("Загрузка индекса страха и жадности...") }
|
||||
|
||||
// Запускаем корутину для выполнения сетевых запросов
|
||||
LaunchedEffect(Unit) {
|
||||
// Запрос Bitcoin Ticker
|
||||
val tickerResponse = cryptoRepository.fetchBitcoinTicker()
|
||||
bitcoinTicker = tickerResponse?.joinToString(separator = "\n") { data ->
|
||||
"Название: ${data.name}, Цена: ${data.priceUsd}, Обновлено: ${data.lastUpdated}"
|
||||
} ?: "Ошибка загрузки Bitcoin Ticker"
|
||||
|
||||
// Запрос глобальных данных
|
||||
val globalResponse = cryptoRepository.fetchGlobalData()
|
||||
globalData = globalResponse?.data?.let { data ->
|
||||
"Активных криптовалют: ${data.activeCryptocurrencies}\nРыночная капитализация: ${data.totalMarketCapUsd}\n24h Объем: ${data.total24hVolumeUsd}"
|
||||
} ?: "Ошибка загрузки глобальных данных"
|
||||
|
||||
// Запрос индекса страха и жадности
|
||||
val fearResponse = cryptoRepository.fetchFearAndGreedData(30)
|
||||
fearGreedData = fearResponse?.dataList?.joinToString(separator = "\n") { data ->
|
||||
"Время: ${data.timestamp}, Значение: ${data.value}, Классификация: ${data.valueClassification}"
|
||||
} ?: "Ошибка загрузки данных страха и жадности"
|
||||
}
|
||||
|
||||
@Preview(showBackground = true)
|
||||
@Composable
|
||||
fun GreetingPreview() {
|
||||
BitcoinSummarizerTheme {
|
||||
Greeting("Android")
|
||||
// Отображаем результаты в виде простой страницы
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.padding(16.dp)
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
Text(text = "Bitcoin Ticker Data", style = MaterialTheme.typography.bodyMedium)
|
||||
Text(text = bitcoinTicker)
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
Text(text = "Global Data", style = MaterialTheme.typography.bodyMedium)
|
||||
Text(text = globalData)
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
Text(text = "Fear & Greed Index", style = MaterialTheme.typography.bodyMedium)
|
||||
Text(text = fearGreedData)
|
||||
}
|
||||
}
|
@ -1,16 +1,16 @@
|
||||
[versions]
|
||||
agp = "8.8.1"
|
||||
agp = "8.8.2"
|
||||
converterGson = "2.9.0"
|
||||
kotlin = "2.0.0"
|
||||
coreKtx = "1.10.1"
|
||||
coreKtx = "1.15.0"
|
||||
junit = "4.13.2"
|
||||
junitVersion = "1.1.5"
|
||||
espressoCore = "3.5.1"
|
||||
kotlinxCoroutinesAndroid = "1.7.1"
|
||||
kotlinxCoroutinesCore = "1.7.1"
|
||||
lifecycleRuntimeKtx = "2.6.1"
|
||||
activityCompose = "1.8.0"
|
||||
composeBom = "2024.04.01"
|
||||
junitVersion = "1.2.1"
|
||||
espressoCore = "3.6.1"
|
||||
kotlinxCoroutinesAndroid = "1.7.3"
|
||||
kotlinxCoroutinesCore = "1.7.3"
|
||||
lifecycleRuntimeKtx = "2.8.7"
|
||||
activityCompose = "1.10.1"
|
||||
composeBom = "2025.02.00"
|
||||
retrofit = "2.9.0"
|
||||
|
||||
[libraries]
|
||||
|
Loading…
x
Reference in New Issue
Block a user