Проблема, с которой я столкнулся, заключается в том, что данные вставляются в таблицу, а не проблемы, но затем я не могу их никуда получить. Я пытался выполнить операторы печати, но только хранилище заказов выборки по-прежнему сохраняет эффект запуска объявления.
**Это моя функция Dao, которая создает запросы типов возврата объявлений и обрабатывает вставки **@Dao
interface OrderDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertOrder(order: Order)
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertProduct(product: Product)
@Query("SELECT * FROM orders")
suspend fun getAllOrders(): List
@Query("SELECT * FROM products WHERE orderId = :orderId")
suspend fun getProductsForOrder(orderId: String): List
@Update
suspend fun updateProduct(product: Product)
@Query("UPDATE products SET currentCount = :newCount WHERE productId = :productId AND orderId = :orderId")
suspend fun updateProductCount(productId: String, orderId: String, newCount: String)
@Query("SELECT COUNT(*) FROM orders")
suspend fun countOrders(): Int
@Query("SELECT COUNT(*) FROM products")
suspend fun countProducts(): Int
@Query("SELECT * FROM orders")
fun getAllOrdersAsLiveData(): LiveData
}
Это хранилище заказов
Я знаю, что текущие данные автоматически передаются в основной поток, но я не хочу использовать основная тема для этого
class OrderRepository(private val db: AppDatabase) {
val allOrders: LiveData = db.orderDao().getAllOrdersAsLiveData()
// Insert an order
@WorkerThread
suspend fun insertOrder(order: Order) {
withContext(Dispatchers.IO) {
try {
db.orderDao().insertOrder(order)
} catch (e: Exception) {
Log.e("OrderRepository", "Error inserting order: ${e.message}")
}
}
}
// Fetch all orders as LiveData
@WorkerThread
fun fetchAllOrdersAsLiveData(): LiveData {
return db.orderDao().getAllOrdersAsLiveData() // Assuming you have this method in your DAO
}
// Fetch all orders (suspend function)
@WorkerThread
suspend fun fetchAllOrders(): List {
return withContext(Dispatchers.IO) {
try {
val orders = db.orderDao().getAllOrders()
Log.d("OrderRepository", "Fetched orders: $orders, Size: ${orders.size}")
orders
} catch (e: Exception) {
Log.e("OrderRepository", "Error fetching orders: ${e.message}")
emptyList() // Return an empty list on error
}
}
}
// Insert a product
@WorkerThread
suspend fun insertProduct(product: Product) {
withContext(Dispatchers.IO) {
try {
db.orderDao().insertProduct(product)
} catch (e: Exception) {
Log.e("OrderRepository", "Error inserting product: ${e.message}")
}
}
}
// Update product count
@WorkerThread
suspend fun updateProductCount(productId: String, orderId: String, newCount: String) {
withContext(Dispatchers.IO) {
try {
db.orderDao().updateProductCount(productId, orderId, newCount)
} catch (e: Exception) {
Log.e("OrderRepository", "Error updating product count: ${e.message}")
}
}
}
}
Просмотр модели
class OrderViewModel(private val repository: OrderRepository) : ViewModel() {
val allOrders: LiveData = repository.allOrders
fun insertOrder(order: Order) {
viewModelScope.launch {
repository.insertOrder(order)
}
}
suspend fun fetchAllOrders(): List {
return repository.fetchAllOrders()
}
fun insertProduct(product: Product) {
viewModelScope.launch {
repository.insertProduct(product)
}
}
fun updateProductCount(productId: String, orderId: String, newCount: String) {
viewModelScope.launch {
repository.updateProductCount(productId, orderId, newCount)
}
}
}
Заполнение базы данных
Я знаю, что это, вероятно, не самый эффективный способ справиться с этой задачей.
private suspend fun parseQrCodes(qrCodeResults: List) {
for (qrCodeResult in qrCodeResults) {
val parts = qrCodeResult.split("%")
val orderNumber = parts[0]
val data: HashMap = HashMap()
// Insert the order into the database
orderRepository.insertOrder(Order(orderNumber))
for (order in parts.subList(1, parts.size)) {
val (productId, quantity) = order.split("$")
val orderDetails: HashMap = HashMap()
orderDetails[quantity] = "0"
data[productId] = orderDetails
// Create a Product object and insert it into the database
val product = Product(productId, orderNumber, quantity)
orderRepository.insertProduct(product) // Call to insertProduct in OrderRepository
}
qrCodesOrderDataParsed[orderNumber] = data
}
}
Вот как я пытаюсь получить доступ к базе данных в другом действии
// Database and local context initialization
val context = LocalContext.current
val database = AppDatabase.getDatabase(context)
val orderRepository = remember { OrderRepository(database) }
// Create ViewModel
val viewModel: OrderViewModel = viewModel(factory = OrderViewModelFactory(orderRepository))
// Observe the orders LiveData
val dataFromDatabase by viewModel.allOrders.observeAsState(emptyList())
LaunchedEffect(dataFromDatabase){
Log.d("OrderPreviewScreen", "Data from database: $dataFromDatabase")
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... where-else
Данные из комнаты Kotlin появляются только в Launcheffects и больше нигде. ⇐ JAVA
Программисты JAVA общаются здесь
1727882179
Anonymous
Проблема, с которой я столкнулся, заключается в том, что данные вставляются в таблицу, а не проблемы, но затем я не могу их никуда получить. Я пытался выполнить операторы печати, но только хранилище заказов выборки по-прежнему сохраняет эффект запуска объявления.
**Это моя функция Dao, которая создает запросы типов возврата объявлений и обрабатывает вставки **@Dao
interface OrderDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertOrder(order: Order)
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertProduct(product: Product)
@Query("SELECT * FROM orders")
suspend fun getAllOrders(): List
@Query("SELECT * FROM products WHERE orderId = :orderId")
suspend fun getProductsForOrder(orderId: String): List
@Update
suspend fun updateProduct(product: Product)
@Query("UPDATE products SET currentCount = :newCount WHERE productId = :productId AND orderId = :orderId")
suspend fun updateProductCount(productId: String, orderId: String, newCount: String)
@Query("SELECT COUNT(*) FROM orders")
suspend fun countOrders(): Int
@Query("SELECT COUNT(*) FROM products")
suspend fun countProducts(): Int
@Query("SELECT * FROM orders")
fun getAllOrdersAsLiveData(): LiveData
}
[b]Это хранилище заказов[/b]
Я знаю, что текущие данные автоматически передаются в основной поток, но я не хочу использовать основная тема для этого
class OrderRepository(private val db: AppDatabase) {
val allOrders: LiveData = db.orderDao().getAllOrdersAsLiveData()
// Insert an order
@WorkerThread
suspend fun insertOrder(order: Order) {
withContext(Dispatchers.IO) {
try {
db.orderDao().insertOrder(order)
} catch (e: Exception) {
Log.e("OrderRepository", "Error inserting order: ${e.message}")
}
}
}
// Fetch all orders as LiveData
@WorkerThread
fun fetchAllOrdersAsLiveData(): LiveData {
return db.orderDao().getAllOrdersAsLiveData() // Assuming you have this method in your DAO
}
// Fetch all orders (suspend function)
@WorkerThread
suspend fun fetchAllOrders(): List {
return withContext(Dispatchers.IO) {
try {
val orders = db.orderDao().getAllOrders()
Log.d("OrderRepository", "Fetched orders: $orders, Size: ${orders.size}")
orders
} catch (e: Exception) {
Log.e("OrderRepository", "Error fetching orders: ${e.message}")
emptyList() // Return an empty list on error
}
}
}
// Insert a product
@WorkerThread
suspend fun insertProduct(product: Product) {
withContext(Dispatchers.IO) {
try {
db.orderDao().insertProduct(product)
} catch (e: Exception) {
Log.e("OrderRepository", "Error inserting product: ${e.message}")
}
}
}
// Update product count
@WorkerThread
suspend fun updateProductCount(productId: String, orderId: String, newCount: String) {
withContext(Dispatchers.IO) {
try {
db.orderDao().updateProductCount(productId, orderId, newCount)
} catch (e: Exception) {
Log.e("OrderRepository", "Error updating product count: ${e.message}")
}
}
}
}
[b]Просмотр модели[/b]
class OrderViewModel(private val repository: OrderRepository) : ViewModel() {
val allOrders: LiveData = repository.allOrders
fun insertOrder(order: Order) {
viewModelScope.launch {
repository.insertOrder(order)
}
}
suspend fun fetchAllOrders(): List {
return repository.fetchAllOrders()
}
fun insertProduct(product: Product) {
viewModelScope.launch {
repository.insertProduct(product)
}
}
fun updateProductCount(productId: String, orderId: String, newCount: String) {
viewModelScope.launch {
repository.updateProductCount(productId, orderId, newCount)
}
}
}
[b]Заполнение базы данных[/b]
Я знаю, что это, вероятно, не самый эффективный способ справиться с этой задачей.
private suspend fun parseQrCodes(qrCodeResults: List) {
for (qrCodeResult in qrCodeResults) {
val parts = qrCodeResult.split("%")
val orderNumber = parts[0]
val data: HashMap = HashMap()
// Insert the order into the database
orderRepository.insertOrder(Order(orderNumber))
for (order in parts.subList(1, parts.size)) {
val (productId, quantity) = order.split("$")
val orderDetails: HashMap = HashMap()
orderDetails[quantity] = "0"
data[productId] = orderDetails
// Create a Product object and insert it into the database
val product = Product(productId, orderNumber, quantity)
orderRepository.insertProduct(product) // Call to insertProduct in OrderRepository
}
qrCodesOrderDataParsed[orderNumber] = data
}
}
[b]Вот как я пытаюсь получить доступ к базе данных в другом действии[/b]
// Database and local context initialization
val context = LocalContext.current
val database = AppDatabase.getDatabase(context)
val orderRepository = remember { OrderRepository(database) }
// Create ViewModel
val viewModel: OrderViewModel = viewModel(factory = OrderViewModelFactory(orderRepository))
// Observe the orders LiveData
val dataFromDatabase by viewModel.allOrders.observeAsState(emptyList())
LaunchedEffect(dataFromDatabase){
Log.d("OrderPreviewScreen", "Data from database: $dataFromDatabase")
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79047288/data-from-room-kotlin-only-appear-in-launcheffects-not-anywhere-else[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия