main #24
@ -4,13 +4,23 @@ import android.os.Bundle
|
|||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
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.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
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.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
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.Modifier
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.unit.dp
|
||||||
import ru.vendetti.bitcoin_summarizer.ui.theme.BitcoinSummarizerTheme
|
import ru.vendetti.bitcoin_summarizer.ui.theme.BitcoinSummarizerTheme
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
@ -19,29 +29,59 @@ class MainActivity : ComponentActivity() {
|
|||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
setContent {
|
setContent {
|
||||||
BitcoinSummarizerTheme {
|
BitcoinSummarizerTheme {
|
||||||
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
|
CryptoScreen()
|
||||||
Greeting(
|
|
||||||
name = "Android",
|
|
||||||
modifier = Modifier.padding(innerPadding)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Greeting(name: String, modifier: Modifier = Modifier) {
|
fun CryptoScreen() {
|
||||||
Text(
|
// Создаем репозиторий для работы с API
|
||||||
text = "Hello $name!",
|
val cryptoRepository = remember { CryptoRepository(RetrofitClient.apiService) }
|
||||||
modifier = modifier
|
|
||||||
)
|
// Состояния для хранения результатов запросов
|
||||||
|
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
|
Column(
|
||||||
fun GreetingPreview() {
|
modifier = Modifier
|
||||||
BitcoinSummarizerTheme {
|
.fillMaxSize()
|
||||||
Greeting("Android")
|
.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]
|
[versions]
|
||||||
agp = "8.8.1"
|
agp = "8.8.2"
|
||||||
converterGson = "2.9.0"
|
converterGson = "2.9.0"
|
||||||
kotlin = "2.0.0"
|
kotlin = "2.0.0"
|
||||||
coreKtx = "1.10.1"
|
coreKtx = "1.15.0"
|
||||||
junit = "4.13.2"
|
junit = "4.13.2"
|
||||||
junitVersion = "1.1.5"
|
junitVersion = "1.2.1"
|
||||||
espressoCore = "3.5.1"
|
espressoCore = "3.6.1"
|
||||||
kotlinxCoroutinesAndroid = "1.7.1"
|
kotlinxCoroutinesAndroid = "1.7.3"
|
||||||
kotlinxCoroutinesCore = "1.7.1"
|
kotlinxCoroutinesCore = "1.7.3"
|
||||||
lifecycleRuntimeKtx = "2.6.1"
|
lifecycleRuntimeKtx = "2.8.7"
|
||||||
activityCompose = "1.8.0"
|
activityCompose = "1.10.1"
|
||||||
composeBom = "2024.04.01"
|
composeBom = "2025.02.00"
|
||||||
retrofit = "2.9.0"
|
retrofit = "2.9.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user