Menu
Who Do Is
  • Home
  • What
  • How
  • Is
  • Can
  • Are
  • Does
  • Do
  • Why
  • Who
  • Where
  • Which
  • Which
  • Should
  • Will
  • When
  • What’s
  • Did
Who Do Is

[ANSWERED] android – Kotlin LiveData Coroutines

Posted on November 14, 2022

Solution 1 :

your LiveData can be referencing MutableLiveData, where you post stuff

private val userMLD = MutableLiveData<List<User>>()
val userLiveData: LiveData<List<User>> = userMLD

and

    private fun getUsers() {
        val apiHelper = ApiHelper(RetrofitBuilder.apiService)
        val mainRepository = MainRepository(apiHelper)
        userMLD.postValue(mainRepository.getUsers())
    }

Solution 2 :

Instead of creating a LiveData everytime, run your code inside a coroutine and update the LiveData with the new value. You need a MutableLiveData for that:

class MainActivity : AppCompatActivity() {
    
    private val userLiveData = MutableLiveData<List<User>>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        getUsers()     //WORKING <---------
        userLiveData.observe(this, Observer {
            it.forEach { user ->
                Log.i("TAG", user.name)
            }
        })

        lifecycleScope.launch {
            delay(5000)  //Refresh the result
            getUsers()   //NOT WORKING <---------
        }
    }

    private fun getUsers() {
        val apiHelper = ApiHelper(RetrofitBuilder.apiService)
        val mainRepository = MainRepository(apiHelper)
        lifecycleScope.launch {
            val users = withContext(Dispatchers.IO) {
                mainRepository.getUsers()  //Suspend function
            }
            
            userLiveData.value = users
        }
    }
}

Problem :

The code below works only once.

class MainActivity : AppCompatActivity() {


    lateinit var userLiveData: LiveData<List<User>>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        getUsers()     //WORKING <---------
        userLiveData.observe(this, Observer {
            it.forEach { user ->
                Log.i("TAG", user.name)
            }
        })

        lifecycleScope.launch {
            delay(5000)  //Refresh the result
            getUsers()   //NOT WORKING <---------
        }
    }

    private fun getUsers() {
        val apiHelper = ApiHelper(RetrofitBuilder.apiService)
        val mainRepository = MainRepository(apiHelper)
        userLiveData = liveData {
            val res = mainRepository.getUsers()  //Suspend function
            emit(res)
        }
    }
}

The first time I call the getUsers() function, I can see the logs. But Later I call getUsers() , there is no log on the screen.
Which means that the userLiveData.observe( function runs once.

Comments

Comment posted by IR42

because you create а new livedata but observe an old one

Comment posted by Qwe Qwe

Yes you are right. So how can I run the old one again without destroying it.

READ  [ANSWERED] android - java.lang.NumberFormatException: empty String of editText
Powered by Inline Related Posts

Recent Posts

  • How can I play with my cat without toys?
  • What is a bag pipe band called?
  • Are Honda Civics actually fast?
  • Are Yankee candles toxic?
  • How do I pair my Michael Kors smartwatch with my Android?

Recent Comments

No comments to show.

Archives

  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022

Categories

  • ¿Cómo
  • ¿Cuál
  • ¿Cuántas
  • ¿Cuánto
  • ¿Que
  • ¿Quién
  • 90” and 108” so you may have to round up to the nearest size.
  • and delete any Spotify folders from it. Once this is done
  • Android
  • Are
  • At
  • Bei
  • blink
  • C'est
  • Can
  • carbs
  • Comment
  • Did
  • Do
  • Does
  • During
  • For
  • Has
  • How
  • In
  • Is
  • Ist
  • Kann
  • Können
  • nouveau
  • On
  • or 108 inches.2020-08-03
  • Où
  • owning
  • Pourquoi
  • Puis-je
  • Quand
  • Quante
  • Quel
  • Quelle
  • Quelles
  • Quels
  • Qui
  • Should
  • Sind
  • Sollte
  • spiritual
  • tap the downward-facing arrow on the top left. A downward-facing arrow will appear underneath each song in the album; they'll turn green as the download completes.2020-07-28
  • Uncategorized
  • Wann
  • Warum
  • Was
  • Welche
  • Welcher
  • Welches
  • Welke
  • Wer
  • Were
  • What
  • What's
  • When
  • Where
  • Which
  • Who
  • Whose
  • Why
  • Wie
  • Will
  • Wo
  • Woher
  • you will receive two curtains each with the same measurements of width 66"" (168cm) x drop 54""(137cm).
  • you'll see a green downward-facing arrow next to each song.2021-02-26
©2023 Who Do Is | Powered by SuperbThemes & WordPress