Я получаю список из конфигурации firebase, я вставляю их в базу данных с каркасом помещения, я хочу использовать liveata, чтобы уведомить mainacctivity о том, что данные извлекаются из firebase, и после того, как из базы данных все работает, я извлекаю простые данные, чтобы проверить, хранятся ли на них данные. базы данных, но когда я получаю список liveata, их значение всегда равно nul
здесь, что я пытался
MainActivity:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
questionsViewModel.listQuestions!!.observe(this, Observer<List<Question>>{
// The second call it is null
if(it != null) {
// we enter never here is always null
}
})
questionsViewModel.getListQuestion()
}
QuestionsViewModel:
class QuestionsViewModel(private val questionRepo: QuestionRepository, val c : Context) : ViewModel(),
KoinComponent {
var listQuestions : MutableLiveData<List<Question>> = MutableLiveData<List<Question>>()
var question : MutableLiveData<String> = MutableLiveData()
init {
listQuestions.value = listOf()
}
fun getListQuestion(){
questionRepo.getQuestion({ listQuestionsFromDatabase ->
this.listQuestions.value = listQuestionsFromDatabase.value
},{_ ->
})
}
QuestionRepository:
class QuestionRepository(private val questionService: QuestionService){
fun getQuestion(onSuccess: (listQuestions: LiveData<List<Question>>) -> Unit,
onError: (error: String) -> Unit) {
questionService.getListQuestionNonAsked({ listQuestions ->
onSuccess(listQuestions)
},{error ->
})
}
}
QuestionService:
public fun getListQuestionNonAsked (
onSuccess: (listQuestions: LiveData<List<Question>>) -> Unit,
onError: (error: String) -> Unit) {
remoteConfig.fetchAndActivate().addOnCompleteListener {
if (it.isSuccessful) {
var listQuestion = remoteConfig.getString("questions_sport_vf")
val json = Json(JsonConfiguration.Stable)
try {
val serializer = Questions.serializer()
val questionsRecuperer : Questions = Json.nonstrict.parse(serializer, listQuestion)
val version = questionsRecuperer.version.toInt()
val versionFromPref = prefHandle.versionDatabaseLocal
if(versionFromPref < version){
// On insere dans la base de donnee
// On vide la database et on insere les nouvelle donnees
//val questiondao = database?.questionDao()
database?.questionDao()?.deleteAll()
database?.questionDao()?.insertList(questionsRecuperer.data)
}
// Just for test listdata witout livedata are retrieven
val z = database!!.questionDao().getDataList()
// this is my problem the value is null
val a = database!!.questionDao().getData()
// this value is null
val b = a.value
onSuccess(database!!.questionDao().getData())
}catch (e : Exception){
print(e.stackTrace)
onError(e.stackTrace.toString())
}
} else {
}
}
}
QuestionDao:
@Dao
abstract class QuestionDao : BaseDao<Question> {
@Query("SELECT * FROM Question")
abstract fun getData(): LiveData<List<Question>>
@Query("DELETE FROM Question")
abstract fun deleteAll()
constructor()
@Query("SELECT * FROM Question")
abstract fun getDataList(): List<Question>
}
База данных приложений:
@Database(entities = arrayOf(Question::class), version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase(), KoinComponent {
abstract fun questionDao(): QuestionDao
companion object {
private var APPDATABASE: AppDatabase? = null
fun getInstance(context: Context): AppDatabase? {
if (APPDATABASE == null) {
synchronized(AppDatabase::class) {
APPDATABASE = Room.databaseBuilder(context.getApplicationContext(),
AppDatabase::class.java, "questionQuizzVraiFaux.db").allowMainThreadQueries()
.build()
}
}
return APPDATABASE
}
}
}
Спасибо за вашу помощь