3-ая не работает все еще
This commit is contained in:
parent
0e97bb7444
commit
ad397832d9
@ -11,7 +11,7 @@ android {
|
||||
defaultConfig {
|
||||
applicationId = "com.example.myapplication"
|
||||
minSdk = 24
|
||||
targetSdk = 33
|
||||
targetSdk = 34
|
||||
versionCode = 1
|
||||
versionName = "1.0"
|
||||
|
||||
@ -50,6 +50,7 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation("androidx.core:core-ktx:1.9.0")
|
||||
|
@ -1,14 +1,13 @@
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.util.Log
|
||||
import androidx.room.Database
|
||||
import androidx.room.Room
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.room.TypeConverters
|
||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||
import com.example.myapplication.R
|
||||
import com.example.myapplication.database.ImageConverter
|
||||
import com.example.myapplication.database.entities.ImageConverter
|
||||
import com.example.myapplication.database.dao.CardDao
|
||||
import com.example.myapplication.database.dao.UserDao
|
||||
import com.example.myapplication.database.entities.Card
|
||||
@ -23,36 +22,23 @@ abstract class MobileAppDataBase : RoomDatabase() {
|
||||
abstract fun userDao(): UserDao
|
||||
abstract fun cardDao(): CardDao
|
||||
|
||||
companion object{
|
||||
companion object {
|
||||
private const val DB_NAME: String = "my-db"
|
||||
|
||||
@Volatile
|
||||
private var INSTANCE: MobileAppDataBase? = null
|
||||
|
||||
suspend fun initialDataBase(appContext: Context){
|
||||
INSTANCE?.let { database ->
|
||||
val userDao = database.userDao()
|
||||
userDao.insert(User(id = 1, login = "Иван", password = "1234",))
|
||||
userDao.insert(User(id = 2, login = "Леонель Месси", password = "4321",))
|
||||
|
||||
val cardDao = database.cardDao()
|
||||
cardDao.insert(Card(name = "Феррари Имба", location = "г. Ульяновск",
|
||||
image = BitmapFactory.decodeResource(appContext.resources, R.drawable.ferrari_laferrari_car2), mileage = 7322, price = 125000, userId = 1)
|
||||
)
|
||||
cardDao.insert(Card(name = "Москоувич", location = "г. Москва",
|
||||
image = BitmapFactory.decodeResource(appContext.resources, R.drawable.moscowich_car3), mileage = 156771, price = 1000, userId = 1)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun getInstance(appContext: Context): MobileAppDataBase {
|
||||
return INSTANCE ?: synchronized(this) {
|
||||
Room.databaseBuilder(
|
||||
INSTANCE?.let { return@let it } // Возвращаем INSTANCE, если он уже был создан
|
||||
|
||||
val instance = Room.databaseBuilder(
|
||||
appContext,
|
||||
MobileAppDataBase::class.java,
|
||||
DB_NAME
|
||||
)
|
||||
.addCallback(object : Callback() {
|
||||
.fallbackToDestructiveMigration()
|
||||
.addCallback(object : RoomDatabase.Callback() {
|
||||
override fun onCreate(db: SupportSQLiteDatabase) {
|
||||
super.onCreate(db)
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
@ -60,10 +46,49 @@ abstract class MobileAppDataBase : RoomDatabase() {
|
||||
}
|
||||
}
|
||||
})
|
||||
.fallbackToDestructiveMigration()
|
||||
.also { INSTANCE = it.build() } // Сохраняем INSTANCE
|
||||
.build()
|
||||
.also { INSTANCE = it }
|
||||
|
||||
Log.d("Database", "Database instance created")
|
||||
|
||||
instance // Возвращаем созданный instance
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun initialDataBase(appContext: Context) {
|
||||
INSTANCE?.let { database ->
|
||||
val userDao = database.userDao()
|
||||
userDao.insert(User(id = 1, login = "Иван", password = "1234",))
|
||||
userDao.insert(User(id = 2, login = "Леонель Месси", password = "4321",))
|
||||
|
||||
val cardDao = database.cardDao()
|
||||
cardDao.insert(
|
||||
Card(
|
||||
name = "Феррари Имба",
|
||||
location = "г. Ульяновск",
|
||||
image = BitmapFactory.decodeResource(
|
||||
appContext.resources,
|
||||
R.drawable.ferrari_laferrari_car2
|
||||
),
|
||||
mileage = 7322,
|
||||
price = 125000,
|
||||
userId = 1
|
||||
)
|
||||
)
|
||||
cardDao.insert(
|
||||
Card(
|
||||
name = "Москоувич",
|
||||
location = "г. Москва",
|
||||
image = BitmapFactory.decodeResource(
|
||||
appContext.resources,
|
||||
R.drawable.moscowich_car3
|
||||
),
|
||||
mileage = 156771,
|
||||
price = 1000,
|
||||
userId = 1
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,8 +5,6 @@ import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.ForeignKey
|
||||
import androidx.room.PrimaryKey
|
||||
import androidx.room.TypeConverters
|
||||
import com.example.myapplication.database.ImageConverter
|
||||
|
||||
@Entity(
|
||||
tableName = "cards",
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.example.myapplication.database
|
||||
package com.example.myapplication.database.entities
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
@ -1,5 +1,6 @@
|
||||
package com.example.myapplication.screens
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@ -42,9 +43,14 @@ fun Authorization(navController: NavHostController){
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
withContext(Dispatchers.IO) {
|
||||
MobileAppDataBase.getInstance(context).userDao().getAll().collect { data ->
|
||||
users.clear()
|
||||
users.addAll(data)
|
||||
try {
|
||||
val database = MobileAppDataBase.getInstance(context.applicationContext)
|
||||
database.userDao().getAll().collect { data ->
|
||||
users.clear()
|
||||
users.addAll(data)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("DatabaseError", "Error accessing database", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.example.myapplication.screens
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
@ -25,8 +26,10 @@ import com.example.myapplication.database.entities.Card
|
||||
import com.example.myapplication.ui.theme.SkyBlue
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
@ -40,11 +43,14 @@ import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.mutableStateListOf
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.example.myapplication.R
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
@Composable
|
||||
@ -54,80 +60,39 @@ fun MainScreen(navController: NavHostController) {
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
withContext(Dispatchers.IO) {
|
||||
MobileAppDataBase.getInstance(context).cardDao().getAll().collect { data ->
|
||||
cards.clear()
|
||||
cards.addAll(data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(Color.White)
|
||||
) {
|
||||
DataListScroll(navController, cards)
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(SkyBlue),
|
||||
verticalArrangement = Arrangement.Center
|
||||
) {
|
||||
navBar(navController = navController)
|
||||
}
|
||||
}
|
||||
|
||||
/*@Composable
|
||||
private fun ListItem(
|
||||
card: Card,
|
||||
navController: NavHostController
|
||||
) {
|
||||
val bitmap = remember(card) {
|
||||
BitmapFactory.decodeByteArray(card.image, 0, card.image.size)
|
||||
}
|
||||
|
||||
val imageBitmap = remember(bitmap) {
|
||||
bitmap.asImageBitmap()
|
||||
}
|
||||
|
||||
Card(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(10.dp)
|
||||
.border(2.dp, Color.Gray, RoundedCornerShape(15.dp)),
|
||||
shape = RoundedCornerShape(15.dp),
|
||||
elevation = CardDefaults.cardElevation(defaultElevation = 5.dp),
|
||||
) {
|
||||
Box {
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Image(
|
||||
painter = remember {
|
||||
BitmapPainter(imageBitmap)
|
||||
},
|
||||
contentDescription = "image",
|
||||
contentScale = ContentScale.Crop,
|
||||
modifier = Modifier.size(128.dp)
|
||||
)
|
||||
Column(
|
||||
modifier = Modifier.padding(5.dp)
|
||||
) {
|
||||
Text(text = card.name, fontWeight = FontWeight.Bold)
|
||||
Text(text = "Пробег: ${card.mileage}")
|
||||
Text(text = "Расположение: ${card.location}")
|
||||
Text(text = "Цена: ${card.price}")
|
||||
Button(onClick = { navController.navigate("editCard") }) {
|
||||
Text("Изменить")
|
||||
}
|
||||
Button(onClick = { }) {
|
||||
Text("Удалить")
|
||||
}
|
||||
try {
|
||||
val database = MobileAppDataBase.getInstance(context.applicationContext)
|
||||
database.cardDao().getAll().collect { data ->
|
||||
cards.clear()
|
||||
cards.addAll(data)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("DatabaseError", "Error accessing database", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
Box() {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(Color.White)
|
||||
.fillMaxHeight(0.9f)
|
||||
) {
|
||||
DataListScroll(navController, cards)
|
||||
}
|
||||
}
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(SkyBlue)
|
||||
.fillMaxHeight(0.1f),
|
||||
verticalArrangement = Arrangement.Center
|
||||
) {
|
||||
navBar(navController = navController)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun <T : Any> DataListScroll(navController: NavHostController, dataList: List<T>){
|
||||
|
Loading…
Reference in New Issue
Block a user