1

my connecter:

interface SettingsVMRepConnector {
    fun getUserEmail(email: String)
}

in my viewmodel:

class MyViewModel: ViewModel(), SettingsVMRepConnector
{
    private val repository= SettingsRepository(this)
    private var inputUserEmail= MutableLiveData<String?>()
        fun getInputUserEmail(): LiveData<String?> {return inputUserEmail}
    ...
    init{
        repository.findUserEmail()
    }
    override fun getUserEmail(email:String)  {

        inputUserEmail.value = email
        println(inputUserEmail.value.toString()+"...")

    }
}

in my fragment:

 val email : String = viewModel.getInputUserEmail().value.toString()
  println("here: "+email)
  emailInput.setText(email)

and in repository:

class SettingsRepository(val connector: SettingsVMRepConnector){
    private val userID= Hawk.get<String>(Constants.LOGGEDIN_USERID)
    private val usersRef: DatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users")

    fun findUserEmail(){

        usersRef.child(userID).addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
                var email = snapshot.child(Constants.R_USEREMAIL).value.toString()
                connector.getUserEmail(email)
                return
            }
            override fun onCancelled(error: DatabaseError) {
                TODO("Not yet implemented")
            }
        })
    }

}

output is:

here: null

james@gmail.com...

I want to see this email in fragment. Why is returns null? And how can I see this e mail in my fragment?

anonimm
  • 11
  • 2
  • It is possible that when you call `viewModel.getInputUserEmail()`, the email hasn't been loaded yet. You can observe that as live data from your repository as well, or simply observe the `inputUserEmail` livedata. – Darshan Dec 15 '21 at 17:18
  • @DarShan thank you for answer, how can I see this e mail in my fragment? – anonimm Dec 15 '21 at 17:21

0 Answers0