3-ая не работает все еще
This commit is contained in:
parent
0e97bb7444
commit
ad397832d9
@ -11,7 +11,7 @@ android {
|
|||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "com.example.myapplication"
|
applicationId = "com.example.myapplication"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 33
|
targetSdk = 34
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
versionName = "1.0"
|
versionName = "1.0"
|
||||||
|
|
||||||
@ -50,6 +50,7 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
implementation("androidx.core:core-ktx:1.9.0")
|
implementation("androidx.core:core-ktx:1.9.0")
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.graphics.drawable.BitmapDrawable
|
import android.util.Log
|
||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
import androidx.room.RoomDatabase
|
import androidx.room.RoomDatabase
|
||||||
import androidx.room.TypeConverters
|
import androidx.room.TypeConverters
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
import com.example.myapplication.R
|
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.CardDao
|
||||||
import com.example.myapplication.database.dao.UserDao
|
import com.example.myapplication.database.dao.UserDao
|
||||||
import com.example.myapplication.database.entities.Card
|
import com.example.myapplication.database.entities.Card
|
||||||
@ -23,36 +22,23 @@ abstract class MobileAppDataBase : RoomDatabase() {
|
|||||||
abstract fun userDao(): UserDao
|
abstract fun userDao(): UserDao
|
||||||
abstract fun cardDao(): CardDao
|
abstract fun cardDao(): CardDao
|
||||||
|
|
||||||
companion object{
|
companion object {
|
||||||
private const val DB_NAME: String = "my-db"
|
private const val DB_NAME: String = "my-db"
|
||||||
|
|
||||||
@Volatile
|
@Volatile
|
||||||
private var INSTANCE: MobileAppDataBase? = null
|
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 {
|
fun getInstance(appContext: Context): MobileAppDataBase {
|
||||||
return INSTANCE ?: synchronized(this) {
|
return INSTANCE ?: synchronized(this) {
|
||||||
Room.databaseBuilder(
|
INSTANCE?.let { return@let it } // Возвращаем INSTANCE, если он уже был создан
|
||||||
|
|
||||||
|
val instance = Room.databaseBuilder(
|
||||||
appContext,
|
appContext,
|
||||||
MobileAppDataBase::class.java,
|
MobileAppDataBase::class.java,
|
||||||
DB_NAME
|
DB_NAME
|
||||||
)
|
)
|
||||||
.addCallback(object : Callback() {
|
.fallbackToDestructiveMigration()
|
||||||
|
.addCallback(object : RoomDatabase.Callback() {
|
||||||
override fun onCreate(db: SupportSQLiteDatabase) {
|
override fun onCreate(db: SupportSQLiteDatabase) {
|
||||||
super.onCreate(db)
|
super.onCreate(db)
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
@ -60,9 +46,48 @@ abstract class MobileAppDataBase : RoomDatabase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.fallbackToDestructiveMigration()
|
.also { INSTANCE = it.build() } // Сохраняем INSTANCE
|
||||||
.build()
|
.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.Entity
|
||||||
import androidx.room.ForeignKey
|
import androidx.room.ForeignKey
|
||||||
import androidx.room.PrimaryKey
|
import androidx.room.PrimaryKey
|
||||||
import androidx.room.TypeConverters
|
|
||||||
import com.example.myapplication.database.ImageConverter
|
|
||||||
|
|
||||||
@Entity(
|
@Entity(
|
||||||
tableName = "cards",
|
tableName = "cards",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.myapplication.database
|
package com.example.myapplication.database.entities
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
@ -1,5 +1,6 @@
|
|||||||
package com.example.myapplication.screens
|
package com.example.myapplication.screens
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
@ -42,9 +43,14 @@ fun Authorization(navController: NavHostController){
|
|||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
MobileAppDataBase.getInstance(context).userDao().getAll().collect { data ->
|
try {
|
||||||
users.clear()
|
val database = MobileAppDataBase.getInstance(context.applicationContext)
|
||||||
users.addAll(data)
|
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
|
package com.example.myapplication.screens
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
@ -25,8 +26,10 @@ import com.example.myapplication.database.entities.Card
|
|||||||
import com.example.myapplication.ui.theme.SkyBlue
|
import com.example.myapplication.ui.theme.SkyBlue
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.fillMaxHeight
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
@ -40,11 +43,14 @@ import androidx.compose.material3.ButtonDefaults
|
|||||||
import androidx.compose.material3.Card
|
import androidx.compose.material3.Card
|
||||||
import androidx.compose.material3.CardDefaults
|
import androidx.compose.material3.CardDefaults
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.DisposableEffect
|
||||||
import androidx.compose.runtime.mutableStateListOf
|
import androidx.compose.runtime.mutableStateListOf
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import com.example.myapplication.R
|
import com.example.myapplication.R
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -54,80 +60,39 @@ fun MainScreen(navController: NavHostController) {
|
|||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
MobileAppDataBase.getInstance(context).cardDao().getAll().collect { data ->
|
try {
|
||||||
cards.clear()
|
val database = MobileAppDataBase.getInstance(context.applicationContext)
|
||||||
cards.addAll(data)
|
database.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("Удалить")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} 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
|
@Composable
|
||||||
fun <T : Any> DataListScroll(navController: NavHostController, dataList: List<T>){
|
fun <T : Any> DataListScroll(navController: NavHostController, dataList: List<T>){
|
||||||
|
Loading…
Reference in New Issue
Block a user