Reading and displaying data from firebase

Realtime Database से पढ़ने का मतलब है एक reference में एक listener attach करना: एक value-event listener अभी data के साथ fire होता है और हर बार यह change होने पर फिर से, आपकी app को एक live view देते हुए, जबकि एक single-value listener सिर्फ़ एक बार पढ़ता है।

11 min read · 7 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

वापस Data पाना

Data लिखना काम का सिर्फ़ आधा हिस्सा है; FestConnect को events और registrations वापस पढ़नी हैं और screen पर दिखानी हैं। Realtime Database से पढ़ना एक reference में एक listener attach करके किया जाता है, और यहाँ database की real-time nature चमकती है: आपका listener UI को live रख सकता है, जब भी data change हो automatically update होते हुए।

यह lesson दो listener types cover करता है (live बनाम एक बार), एक DataSnapshot से data कैसे निकालें, और listeners को detach करने की habit। अच्छी तरह पढ़ना ही है जो app को connected और current महसूस कराता है।

Theory

Listen करने के दो तरीके

आप एक reference में एक listener attach करके पढ़ते हैं, और आप choose करते हैं यह कितनी देर रहेगा।

addValueEventListener एक persistent listener attach करता है: यह current data के साथ immediately fire होता है, और फिर हर बार data change होने पर फिर से। यह एक live view देता है, एक list के लिए perfect जिसे हमेशा latest state reflect करना चाहिए।

addListenerForSingleValueEvent data को एक बार पढ़ता है और फिर detach हो जाता है, एक one-off fetch के लिए जहाँ आपको live updates नहीं चाहिए।

दोनों तरीकों में, data listener के onDataChange callback में एक DataSnapshot की तरह आता है, और failures onCancelled में आती हैं। Live UIs के लिए persistent listener choose कीजिए, एक quick read के लिए single वाला।

Practical

एक Live Value Listener एक List पढ़ते हुए

val eventsRef = FirebaseDatabase.getInstance().getReference("events")

eventsRef.addValueEventListener(object : ValueEventListener {
    override fun onDataChange(snapshot: DataSnapshot) {
        val events = mutableListOf<String>()
        for (child in snapshot.children) {          // loop the list items
            val name = child.child("name").getValue(String::class.java)
            if (name != null) events.add(name)
        }
        showEvents(events)     // update the UI (e.g. a RecyclerView)
    }
    override fun onCancelled(error: DatabaseError) { /* handle failure */ }
})
// Fires now with current data, and again on every change: a live list.

Formula

जिन Listeners की ज़रूरत नहीं उन्हें Detach कीजिए

एक persistent value listener तब तक running रहता है और updates receive करता है जब तक आप इसे remove न करें। अगर आप एक attach करते हैं और कभी detach नहीं करते, यह screen chले जाने के बाद भी fire करता रह सकता है, resources waste करते हुए और एक memory leak या एक dead UI update करने से crashes का risk लेते हुए।

तो habit है: screen visible होने पर listener attach कीजिए (उदाहरण के लिए onStart में) और जब यह visible न रहे (onStop) removeEventListener कीजिए। Single-value listeners एक read के बाद खुद detach हो जाते हैं, तो इन्हें कोई cleanup नहीं चाहिए। Live listeners के lifecycle को manage कीजिए, और आपकी app efficient और stable रहती है।

Quiz

आप एक FestConnect list चाहते हैं जो हमेशा latest events दिखाए, data change होने पर automatically update होते हुए। कौन सा read approach fit करता है?

  1. addListenerForSingleValueEvent, क्योंकि यह एक बार पढ़ता है
  2. addValueEventListener, जो current data के साथ fire होता है और हर बार change होने पर फिर से, list को live रखते हुए
  3. setValue, क्योंकि यह data पढ़ता है
  4. कोई listener नहीं; बस data guess कीजिए
Show the answer

addValueEventListener, जो current data के साथ fire होता है और हर बार change होने पर फिर से, list को live रखते हुए

addValueEventListener एक persistent listener attach करता है जो current data immediately deliver करता है और फिर हर change पर फिर से fire होता है, तो आपकी list live रहती है और automatically update होती है, exactly वह जो हमेशा-current events list को चाहिए। Option A, addListenerForSingleValueEvent, data को सिर्फ़ एक बार पढ़ता है और detach हो जाता है, तो list events change होने पर update नहीं होगी; यह एक one-off fetch को suit करता है, live view को नहीं। Option C, setValue, data WRITE करता है; यह पढ़ता नहीं। Option D nonsense है। एक live, auto-updating UI के लिए एक value-event listener इस्तेमाल कीजिए (और screen chले जाने पर इसे detach करना याद रखिए); एक single read के लिए, single-value listener इस्तेमाल कीजिए।

Think first

एक Connected App के लिए एक Live Listener इतना Powerful क्यों है?

एक one-time read simpler है। एक persistent value listener आपको क्या देता है जो repeatedly re-fetch करना नहीं देगा? फिर tap कीजिए।

Show the answer

यह आपको बिना polling के एक AUTOMATICALLY CURRENT UI देता है: database changes को होते ही आपकी app को PUSH करता है, तो हर user बिना किसी के refresh या re-request किए latest state देखता है। FestConnect को एक event की remaining seats दिखाते हुए सोचिए। One-time reads के साथ, एक screen stale information दिखा सकती है, '5 seats left' उनके जाने के बहुत बाद तक, जब तक user manually reload न करे, और इसे fresh रखने के लिए आपको POLL करना पड़ता, हर कुछ seconds re-fetch करते हुए, जो wasteful है (constant requests, ज़्यादातर कोई change return नहीं करतीं) और अभी भी laggy है। एक persistent value listener इसे flip करता है: आप एक बार subscribe करते हैं, और Realtime Database आपके onDataChange callback को notify करता है जिस moment कहीं भी data change होता है, तो जब एक student register करता है और count गिरती है, हर listening device खुद-ब-खुद update होती है immediately, live और sync में। यही एक real-time database की core strength है और यही collaborative, social, और live features को instant महसूस कराता है: chats वैसे ही appear होते हैं जैसे भेजी जाती हैं, numbers change होने पर dashboards move करते हैं, data update होने पर lists reorder होती हैं, यह सब free में एक बार listener attach हो जाने के बाद। Cost यह है कि persistent listeners एक connection consume करते हैं और leaks से बचने के लिए manage होने चाहिए (ज़रूरत न होने पर detached), और हर screen को live data नहीं चाहिए। पर जहाँ freshness matter करती है, एक live listener clumsy polling को effortless, push-based syncing से replace करता है। एक बार subscribe कीजिए, और UI खुद को up to date रखता है।

Summary

Key takeaways

  • Realtime Database से पढ़ने के लिए एक reference में एक listener attach कीजिए।
  • addValueEventListener current data के साथ immediately fire होता है और हर change पर फिर से, एक live view देते हुए।
  • addListenerForSingleValueEvent एक बार पढ़ता है फिर detach होता है, एक one-off fetch के लिए।
  • Data onDataChange में एक DataSnapshot की तरह आता है; एक list के लिए getValue(Type) या snapshot.children loop इस्तेमाल कीजिए; failures onCancelled को जाती हैं।
  • जब screen chली जाए persistent listeners detach कीजिए (onStop में removeEventListener) leaks से बचने के लिए; single-value listeners खुद-detach होते हैं।
  • Read हुए data को UI में display कीजिए (जैसे एक RecyclerView)।
  • Memory hook: एक live auto-updating list के लिए value listener, एक read के लिए single-value listener; live वालों को detach कीजिए।

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Firebase Data storage

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Reading and displaying data from firebase · Advance Mobile Application Development - II (Major-15-02) · Gri-Learn