Данные из комнаты Kotlin появляются только в Launcheffects и больше нигде.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Данные из комнаты Kotlin появляются только в Launcheffects и больше нигде.

Сообщение 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
}

Это хранилище заказов
Я знаю, что текущие данные автоматически передаются в основной поток, но я не хочу использовать основная тема для этого
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»