Skip to content

Instantly share code, notes, and snippets.

@Sloy
Last active January 14, 2018 11:20
Show Gist options
  • Select an option

  • Save Sloy/e1f1d06e136476330a9aea194a046637 to your computer and use it in GitHub Desktop.

Select an option

Save Sloy/e1f1d06e136476330a9aea194a046637 to your computer and use it in GitHub Desktop.
Kotlin wrapper for observing the Firebase Realtime Database with Live Data
class FirebaseLiveData(
private val reference: DatabaseReference
) : LiveData<DataSnapshot>() {
private var eventListener: ValueEventListener? = null
override fun onActive() {
super.onActive()
logd("onActive $reference")
eventListener = reference.addValueEventListener(FValueEventListener(
onDataChange = { data ->
value = data
},
onError = { error ->
loge("FirebaseLiveData error", error.toException())
}
))
}
override fun onInactive() {
super.onInactive()
logd("onInactive $reference")
eventListener?.let {
reference.removeEventListener(it)
eventListener = null
}
}
}
class FValueEventListener(val onDataChange: (DataSnapshot) -> Unit, val onError: (DatabaseError) -> Unit) : ValueEventListener {
override fun onDataChange(data: DataSnapshot) = onDataChange.invoke(data)
override fun onCancelled(error: DatabaseError) = onError.invoke(error)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment