Room RawQuery in Compose: Es kann nicht auf Datenbank auf dem Haupt -Thread zugreifen. Müssen einen Fluss <list <myEntitAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Room RawQuery in Compose: Es kann nicht auf Datenbank auf dem Haupt -Thread zugreifen. Müssen einen Fluss <list <myEntit

Post by Anonymous »

Ich muss einen Flow , ich weiß nicht, wie man dem Text entkommt, um die richtige Syntax anzuzeigen)
Mein aktueller Code:
COMPOSE/View -Ebene:

Code: Select all

var filterVal by remember { mutableStateOf("") }
var filterValT by remember { mutableStateOf("") }
var logicV by remember { mutableStateOf(false) }
key(filter, filterT, logic){
filterVal = filter
filterValT = filterT
logicV = logic
}

val items by viewModel.items(parentId, filterVal, if (filterVal.isEmpty() || filterValT.isEmpty()) "" else {logicV.toString()}, filterValT).collectAsState(initial = emptyList())
< /code>
ViewModel Level: < /p>
fun items(subroomId: Long, filter:String = "", logic:String = "", filter2:String = ""): Flow {
val flow: Flow = flow {
val source = repository.getitems(subroomId, filter, logic, filter2)
emitAll(source)
}
return flow
}
< /code>
Repository -Ebene: < /p>
fun getitems(subroomId:Long, filter:String = "", logic:String = "", filter2:String = ""):Flow {
var member =
when(true) {
(filter == "" && filter2 == "") -> inventoryDB.itemDao().getitems(subroomId)
else -> {
inventoryDB.itemDao().getItemsByFilters(subroomId, filter, filter2, logic)
}
}
< /code>
DAO -Ebene: < /p>
@RawQuery(observedEntities = [ItemEntity::class])
fun getItemsByQuery(query: SupportSQLiteQuery): List

fun getItemsByFilters(subroomId: Long, filter:String = "", filter2:String = "", logic:String = ""): Flow {
var pl: MutableList = emptyList().toMutableList()
var al: MutableList = emptyList().toMutableList()
al.add(subroomId.toString())
if (filter != "") {
pl.add("itemname ${if (filter.startsWith(">")) " Like ?" else ">= ?"}")
al.add(if (filter.startsWith(">")) filter.substring(1) else filter)
}
if (filter2 != "") {
pl.add("itemtype ${if (filter.startsWith(">")) " Like ?" else " >= ?"}")
al.add(if (filter2.startsWith(">")) filter2.substring(1) else filter2)
}
val placeholders = if (logic == "OR") pl.joinToString(" OR ") else pl.joinToString(" OR ")
val args = al.toTypedArray()
val query = SimpleSQLiteQuery("SELECT * FROM item WHERE category isnull and subroomId= ? and ($placeholders) ORDER BY category, itemtype, itemname ASC", args)
return getItemsByQuery(query).asFlowOfLists()
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post