Zoeken…


Inzicht in welke gegevens wordt verwezen door getReference ()

In dit voorbeeld gebruiken we deze database:

"your-project-name" : {
    "users" : {
        "randomUserId1" : {
            "display-name" : "John Doe",
            "gender" : "male"
        }
        "randomUserId2" : {
            "display-name" : "Jane Dae",
            "gender" : "female"
        }
    },
    "books" {
        "bookId1" : {
            "title" : "Adventure of Someone"
        },
        "bookId1" : {
            "title" : "Harry Potter"
        },
        "bookId1" : {
            "title" : "Game of Throne"
        }
    }
}

Als u bovenstaande database gebruikt:

  • FirebaseDatabase.getInstance().getReference()

    zal naar de bovenliggende gegevens van uw project verwijzen, "your-project-name" -gegevens. Dus de dataSnapshot u hebt verkregen, bevat alle gegevens, inclusief alle gegevens van "users" en "books" .

  • FirebaseDatabase.getInstance().getReference("users") en FirebaseDatabase.getInstance().getReference().child("users")

    zal hetzelfde resultaat hebben, wijzend op "your-project-name/users"

  • FirebaseDatabase.getInstance().getReference("users/randomUserId1") en FirebaseDatabase.getInstance().getReference().child("users/randomUserId1") en FirebaseDatabase.getInstance().getReference().child("users").child("randomUserId1")

    zal hetzelfde resultaat hebben, wijzend op "your-project-name/users/randomUserId1"

Opmerking: dit voorbeeld is nodig om volledig te begrijpen welke gegevens zich in het dataSnapshot-object bevinden

Begrijpen welke gegevens zich in het dataSnapshot-object bevinden

Opmerking: u moet eerst weten naar welke gegevens wordt verwezen door getReference () voordat u dit voorbeeld volledig kunt begrijpen.

Er zijn drie veel voorkomende methoden om uw gegevens uit Firebase Realtime Database te krijgen:

  • addValueEventListener()
  • addListenerForSingleValueEvent()
  • addChildEventListener()

Als we het hebben over welke gegevens zich in het dataSnapshot object bevinden, zijn addValueEventListener() en addListenerForSingleValueEvent() in principe hetzelfde. Het enige verschil is addValueEventListener() blijf luisteren naar wijzigingen in de gegevens waarnaar wordt verwezen, terwijl addListenerForSingleValueEvent() niet is.


Dus overweeg dat we deze database hebben:

"your-project-name" : {
    "users" : {
        "randomUserId1" : {
            "display-name" : "John Doe",
            "gender" : "male"
        }
        "randomUserId2" : {
            "display-name" : "Jane Dae",
            "gender" : "female"
        }
    },
    "books" {
        "bookId1" : {
            "title" : "Adventure of Someone"
        },
        "bookId1" : {
            "title" : "Harry Potter"
        },
        "bookId1" : {
            "title" : "Game of Throne"
        }
    }
}

DataSnapshot geproduceerd door addValueEventListener en addListenerForSingleValueEvent

dataSnapshot geproduceerd door addValueEventListener() en addListenerForSingleValueEvent() bevat de waarde (n) van de exacte gegevens waarnaar wordt verwezen. Zoals wanneer ref dataSnapshot naar "your-project-name" dan zou dataSnapshot moeten zijn:

... onDataChange(DataSnapshot dataSnapshot) {
    dataSnapshot.getKey(); // will have value of String: "your-project-name"
    for (DataSnapshot snapshot : dataSnapshot) {
        snapshot.getKey(); // will have value of String: "users", then "books"
        for (DataSnapshot deeperSnapshot : dataSnapshot) {
            snapshot.getKey();
            // if snapshot.getKey() is "users", this will have value of String: "randomUserId1", then "randomUserId2"
            // If snapshot.getKey() is "books", this will have value of String: "bookId1", then "bookId2"
        }
    }
}

DataSnapshot geproduceerd door addChildEventListener

dataSnapshot geproduceerd door addChildEventListener() zal de waarde (n) van gegevens bevatten die een niveau dieper zijn binnen de gegevens waarnaar wordt verwezen. Zoals in deze gevallen:

Wanneer ref dataSnapshot naar "your-project-name" dan moet dataSnapshot zijn:

... onChildAdded(DataSnapshot dataSnapshot, String s) {
    dataSnapshot.getKey(); // will have value of String: "users", then "books"
    for (DataSnapshot snapshot : dataSnapshot) {
        snapshot.getKey();
        // if dataSnapshot.getKey() is "users", this will have value of String: "randomUserId1", then "randomUserId2"
        // If dataSnapshot.getKey() is "books", this will have value of String: "bookId1", then "bookId2"
        for (DataSnapshot deeperSnapshot : dataSnapshot) {
            snapshot.getKey();
            // if snapshot.getKey() is "randomUserId1" or "randomUserId1", this will have value of String: "display-name", then "gender"
            // But the value will be different based on key
            // If snapshot.getKey() is "books", this will have value of String: "title", but the value will be different based on key
        }
    }
}
// dataSnapshot inside onChildChanged, onChildMoved, and onChildRemoved will have the same data as onChildAdded

Ik weet waarschijnlijk dat we .getValue() willen gebruiken in plaats van getKey() . Maar hier gebruiken we getKey omdat het altijd één tekenreeks bevat en het niet nodig is om te converteren naar een aangepast object of kaart of een andere. Kortom, wanneer u weet naar welke belangrijke gegevens dataSnapshot , kunt u eenvoudig weten welke waarde het bevat en het in uw eigen aangepaste obeject (of iets anders) vertalen



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow