Cześć.
Próbuję zrobić listę ulubinych grup która będzie się wyświetlać po wciśnięciu gwiazdki w menu. Mimo tego że w bazie danych znajdują się wiersze z danymi o ulubionych grupach, to zawsze moja funkcja z MainViewModel zwraca pustą listę, chociaż w innym fragmencie w którym wyświetlam listę ulubionych grup w recyclerView wszystko działa jak należy i każda nowo stworzona grupa jest poprawnie wyświetlana.
Tutaj wszystko jest w porządku:
A tutaj w innej aktywności na wciśnięcie przycisku menu zawsze wyrzuca mi toast "You have to create a favorites group."
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
finish()
} else if (item.itemId == R.id.save_to_favorites_menu && !recipeSaved) {
val data = mainViewModel.readFavoritesGroups.value?.toTypedArray() // zawsze zwraca mi pustą listę
val favoritesGroups = data?.map { it.name }?.toTypedArray()
// Toast na pustą listę grup ulubionych
if (favoritesGroups.isNullOrEmpty()) {
Toast.makeText(
this,
"You have to create a favorites group.",
Toast.LENGTH_SHORT
).show()
return super.onOptionsItemSelected(item)
}
// wyświetlenie AlertDialogu i wybór grupy
var selected by Delegates.notNull<String>()
AlertDialog.Builder(this)
.setSingleChoiceItems(favoritesGroups, 0) { _, position ->
selected = favoritesGroups[position]
}.show()
val selectedGroup =
mainViewModel.readFavoritesGroups.value!![favoritesGroups.indexOf(selected)]
saveToFavorites(item, selectedGroup)
} else if (item.itemId == R.id.save_to_favorites_menu && recipeSaved) {
removeFromFavorites(item)
}
return super.onOptionsItemSelected(item)
}
Entity:
package com.example.spoonacularapp.data.database.entities
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.example.spoonacularapp.util.Constants
@Entity(tableName = Constants.FAVORITES_GROUPS_TABLE)
class FavoritesGroupsEntity (
@PrimaryKey(autoGenerate = true)
var id: Int,
var name: String,
var color: String
)
Dao:
@Query("SELECT * FROM favorites_groups_table ORDER BY id ASC")
fun readFavoritesGroups(): Flow<List<FavoritesGroupsEntity>>
LocalDataSource:
fun readFavoritesGroups(): Flow<List<FavoritesGroupsEntity>>{
return recipesDao.readFavoritesGroups()
}
Repository:
package com.example.spoonacularapp.data
import dagger.hilt.android.scopes.ViewModelScoped
import javax.inject.Inject
@ViewModelScoped
class Repository @Inject constructor(
remoteDataSource: RemoteDataSource,
localDataSource: LocalDataSource
){
val remote = remoteDataSource
val local = localDataSource
}
MainViewModel:
@HiltViewModel
class MainViewModel @Inject constructor(
private val repository: Repository,
application: Application
): AndroidViewModel(application) {
// ROOM DATABASE
val readRecipes: LiveData<List<RecipesEntity>> = repository.local.readRecipes().asLiveData()
val readFavoriteRecipes: LiveData<List<FavoritesEntity>> = repository.local.readFavoriteRecipes().asLiveData()
val readFavoritesGroups: LiveData<List<FavoritesGroupsEntity>> = repository.local.readFavoritesGroups().asLiveData()
[...]