Bu dokümanda, veri almayla ilgili temel bilgiler ile sıralama ve filtreleme açıklanmaktadır. Firebase verileri.
Başlamadan önce
Uygulamanızı kurduğunuzdan ve
Get Started
rehberini inceleyin.
Veri Alma
Firebase verileri, GetValue()
numaralı telefona yapılan tek seferlik bir çağrıyla veya
bir ValueListener
ekleyerek FirebaseDatabase
referansını ekleyebilirsiniz. Değer
işleyici, verilerin ilk durumu için bir kez ve
veri değişiklikleridir.
Veritabanı Referansı Alma
Veritabanı'na veri yazmak için DatabaseReference
örneğinin olması gerekir:
// Get the root reference location of the database. firebase::database::DatabaseReference dbref = database->GetReference();
Verileri bir kez oku
Şu öğenin statik anlık görüntüsünü okumak için GetValue()
yöntemini kullanabilirsiniz:
belirli bir yoldaki içeriği bir kez. Görev sonucu bir anlık görüntü içerecek
çocuk verileri de dahil olmak üzere söz konusu konumdaki tüm verileri içeren. Veri yoksa
döndürülen anlık görüntü null
.
firebase::Future<firebase::database::DataSnapshot> result = dbRef.GetReference("Leaders").GetValue();
İstekte bulunuldu, ancak Gelecekteki Reklamının tamamlanması gerekir. Oyunlar genellikle bir döngü içinde olduğundan uygulamalara göre daha az geri arama odaklıdır. Bu tür uygulamalar teşekkür etmenin de önemli bir yoludur.
// In the game loop that polls for the result... if (result.status() != firebase::kFutureStatusPending) { if (result.status() != firebase::kFutureStatusComplete) { LogMessage("ERROR: GetValue() returned an invalid result."); // Handle the error... } else if (result.error() != firebase::database::kErrorNone) { LogMessage("ERROR: GetValue() returned error %d: %s", result.error(), result.error_message()); // Handle the error... } else { firebase::database::DataSnapshot snapshot = result.result(); // Do something with the snapshot... } }
Burada, temel hata kontrolleriyle ilgili bilgiler gösterilir. Daha fazla bilgi için firebase::Future referansı hata kontrolü ve sonucun ne zaman hazır olduğunu belirleme yöntemleri hakkında bilgiler içerir.
Etkinlikleri dinleyin
Verilerde yapılan değişikliklere abone olacak dinleyiciler ekleyebilirsiniz:
ValueListener
temel sınıf
Geri Arama | Tipik kullanım |
---|---|
OnValueChanged |
Bir yolun tüm içeriğindeki değişiklikleri okuma ve dinleme. |
OnChildListener
temel sınıf
OnChildAdded
| Öğe listelerini alın veya öğe listesine yapılan eklemeleri dinleyin.
OnChildChanged ve ile önerilen kullanım
Listelerde yapılan değişiklikleri izlemek için OnChildRemoved . |
OnChildChanged |
Listedeki öğelerde yapılan değişiklikleri bekleyin. Şununla kullan:
İzlenecek OnChildAdded ve OnChildRemoved
listeler. |
OnChildRemoved |
Bir listeden kaldırılan öğeleri bekleyin. Şununla kullan:
İzlenecek OnChildAdded ve OnChildChanged
listeler. |
OnChildMoved |
Sıralı listedeki öğelerin sırasındaki değişiklikleri bekleyin.
OnChildMoved geri çağırması her zaman
Öğenin siparişi nedeniyle OnChildChanged geri arama
(geçerli sıralama yönteminize bağlı olarak). |
ValueListener sınıfı
OnValueChanged
geri çağırmayı kullanarak
belirli bir yoldaki içerikler. Bu geri çağırma, dinleyici şu anda bir kez tetiklenir:
eklenir ve çocuklar da dahil olmak üzere veriler her değiştiğinde tekrar eklenir. İlgili içeriği oluşturmak için kullanılan
geri çağırma, aşağıdakiler de dahil olmak üzere söz konusu konumdaki tüm verileri içeren bir anlık görüntü iletir:
alt verileri. Veri yoksa döndürülen anlık görüntü null
olur.
Aşağıdaki örnekte, bir skor tablosunun skorlarını alan bir oyun gösterilmektedir kaldırın:
class LeadersValueListener : public firebase::database::ValueListener { public: void OnValueChanged( const firebase::database::DataSnapshot& snapshot) override { // Do something with the data in snapshot... } void OnCancelled(const firebase::database::Error& error_code, const char* error_message) override { LogMessage("ERROR: LeadersValueListener canceled: %d: %s", error_code, error_message); } }; // Elsewhere in the code... LeadersValueListener* listener = new LeadersValueListener(); firebase::Future<firebase::database::DataSnapshot> result = dbRef.GetReference("Leaders").AddValueListener(listener);
Future<DataSnapshot>
sonucu, belirtilen konumdaki verileri içeriyor
veri tabanında bulunan yedeklenmiş verileri, Anlık görüntüde value()
aranıyor
verileri temsil eden bir Variant
döndürür.
Bu örnekte, OnCancelled
yöntemi de geçersiz kılınır ve okumanın
iptal edildi. Örneğin, istemcinin
Firebase veritabanı konumundan okuma izni. database::Error
,
hatanın nedenini belirtin.
ChildListener sınıfı
Alt etkinlikler,
Bir işlemdeki düğümün alt öğeleridir (ör.
PushChild()
yöntemi veya UpdateChildren()
aracılığıyla güncellenen bir alt öğe
yöntemidir. Bunların her biri birlikte projedeki değişiklikleri dinlemek için
bir düğümden geliyor. Örneğin, bir oyunda bu yöntemler kullanılabilir
aşağıdaki gibi bir oyun oturumuna ait yorumlardaki etkinliği izlemek için aşağıdaki adımları uygulayın:
class SessionCommentsChildListener : public firebase::database::ChildListener { public: void OnChildAdded(const firebase::database::DataSnapshot& snapshot, const char* previous_sibling) override { // Do something with the data in snapshot ... } void OnChildChanged(const firebase::database::DataSnapshot& snapshot, const char* previous_sibling) override { // Do something with the data in snapshot ... } void OnChildRemoved( const firebase::database::DataSnapshot& snapshot) override { // Do something with the data in snapshot ... } void OnChildMoved(const firebase::database::DataSnapshot& snapshot, const char* previous_sibling) override { // Do something with the data in snapshot ... } void OnCancelled(const firebase::database::Error& error_code, const char* error_message) override { LogMessage("ERROR: SessionCommentsChildListener canceled: %d: %s", error_code, error_message); } }; // elsewhere .... SessionCommentsChildListener* listener = new SessionCommentsChildListener(); firebase::Future<firebase::database::DataSnapshot> result = dbRef.GetReference("GameSessionComments").AddChildListener(listener);
OnChildAdded
geri çağırması genellikle
öğeleri eklemesi gerekir. OnChildAdded
geri çağırması bir kez çağrılır
devam eder ve ardından
belirtilen yol. İşleyiciye, yeni alt öğenin
verileri.
Bir alt düğüm her değiştirildiğinde OnChildChanged
geri çağırması çağrılır.
Buna alt düğümün alt öğelerinde yapılan değişiklikler de dahildir. Evet
genellikle OnChildAdded
ve OnChildRemoved
ile birlikte kullanılır
çağrılarının bir öğe listesinde yapılan değişikliklere yanıt vermesini sağlar.
işleyici, çocuk için güncellenmiş verileri içerir.
Şundan birincisi kaldırıldığında OnChildRemoved
geri çağırması tetiklenir.
Genellikle OnChildAdded
ve
OnChildChanged
geri arama. Geri çağırmaya iletilen anlık görüntü,
geri bildirime olanak tanır.
OnChildMoved
geri çağırması, OnChildChanged
her
çağrısı, alt öğenin yeniden sıralanmasına neden olan bir güncelleme tarafından tetikleniyor. Evet
OrderByChild
veya OrderByValue
ile sıralanmış verilerle kullanılır.
Verileri sıralama ve filtreleme
Verileri sıralama ölçütü olarak almak için Realtime Database Query
sınıfını kullanabilirsiniz
değerine veya bir alt öğe değerine göre düzenleyebilirsiniz. Mevcut içeriklerinize göre
sıralanmış sonucu belirli sayıda sonuç veya anahtar aralığı ya da
değerler.
Verileri sırala
Sıralanmış verileri almak için öncelikle sıralamaya göre yöntemlerden birini belirterek sonuçların nasıl sıralandığını belirler:
Yöntem | Kullanım |
---|---|
OrderByChild() |
Sonuçları, belirtilen bir alt anahtarın değerine göre sıralayın. |
OrderByKey()
| Sonuçları alt anahtarlara göre sıralayın. |
OrderByValue() |
Sonuçları alt değerlere göre sıralayın. |
Aynı anda yalnızca bir sıralama yöntemi kullanabilirsiniz. Tek tek sıralama yöntemini çağırma işlemi birden çok kez tekrarlanırsa hata verir.
Aşağıdaki örnekte, bir skora nasıl abone olabileceğiniz gösterilmektedir skora göre sıralanmış skor tablosu.
firebase::database::Query query = dbRef.GetReference("Leaders").OrderByChild("score"); // To get the resulting DataSnapshot either use query.GetValue() and poll the // future, or use query.AddValueListener() and register to handle the // OnValueChanged callback.
Bu,firebase::Query
ValueListener, istemciyi leaderboard ile senkronize eder
puana göre sıralanmış şekilde girin.
Verilerinizi verimli bir şekilde yapılandırma hakkında daha fazla bilgi edinmek için
Veritabanınızı Yapılandırma.
OrderByChild()
yöntemine yapılan çağrı,
arama sonuçlarını görebilirsiniz. Bu durumda sonuçlar, "score"
değerine göre sıralanır.
her bir alt öğedeki değere bakacağız. Diğer veri türlerinin nasıl sıralandığı hakkında daha fazla bilgi için
Sorgu verileri nasıl sıralanır? bölümüne bakın.
Veri filtreleme
Verileri filtrelemek için sınır veya aralık yöntemlerinden herhangi birini, yönteme göre sırala.
Yöntem | Kullanım |
---|---|
LimitToFirst() |
Döndürülecek maksimum öğe sayısını sıralı sonuç listesi. |
LimitToLast() |
Siparişin sonundan itibaren iade edilecek maksimum öğe sayısını ayarlar sonuç listesi. |
StartAt() |
Belirtilen anahtar veya değerden büyük veya ona eşit olan öğeleri döndür seçilen yönteme göre değişir. |
EndAt() |
Belirtilen anahtar veya değerden düşük veya ona eşit öğeleri döndür seçilen yönteme göre değişir. |
EqualTo() |
Belirtilen anahtara veya değere eşit olan öğeleri döndür seçilen yönteme göre değişir. |
Sıralama ölçütü yöntemlerinden farklı olarak birden çok sınırlama veya aralık işlevini birleştirebilirsiniz.
Örneğin, kullanıcı sayısını sınırlandırmak için StartAt()
ve EndAt()
yöntemlerini birleştirebilirsiniz.
sonuçları belirli bir değer aralığına göre ayarlar.
Sorgu için tek bir eşleşme olsa bile anlık görüntü hâlâ bir liste, tek bir öğe içeriyor.
Sonuç sayısını sınırlandırın
Şu değeri ayarlamak için LimitToFirst()
ve LimitToLast()
yöntemlerini kullanabilirsiniz:
belirli bir geri çağırma için senkronize edilecek maksimum alt öğe sayısı. Örneğin,
100'lük bir sınır belirlemek için LimitToFirst()
kullanıyorsanız başlangıçta yalnızca
100 OnChildAdded
geri çağırma. Hesabınızda depoladığınız öğe sayısı 100'den azsa
Firebase veritabanını kullanıyorsanız her öğe için bir OnChildAdded
geri çağırması tetiklenir.
Öğeler değiştikçe şuna giren öğeler için OnChildAdded
geri çağırma alırsınız:
ve OnChildRemoved
geri çağırmasına olanak tanır. Böylece,
toplam sayı 100'de kalıyor.
Örneğin, aşağıdaki kod, bir leaderboard'daki en yüksek skoru döndürür:
firebase::database::Query query = dbRef.GetReference("Leaders").OrderByChild("score").LimitToLast(1); // To get the resulting DataSnapshot either use query.GetValue() and poll the // future, or use query.AddValueListener() and register to handle the // OnValueChanged callback.
Anahtar veya değere göre filtreleyin
İsteğe bağlı seçimi yapmak için StartAt()
, EndAt()
ve EqualTo()
kullanabilirsiniz
Sorgular için başlangıç, bitiş ve denklik noktaları. Bu özellik,
veya belirli bir değere sahip olan öğeleri
bulmanıza yardımcı olur.
Sorgu verileri nasıl sıralanır?
Bu bölümde, verilerin her bir yönteme göre nasıl sıralandığı açıklanmaktadır.
Query
sınıf.
OrderByChild
OrderByChild()
kullanılırken belirtilen alt anahtarı içeren veriler
şu şekilde sıralanmıştır:
- Belirtilen alt anahtar için
null
değerine sahip alt öğeler gelir tıklayın. - Belirtilen alt anahtar için
false
değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocukfalse
değerine sahipse anahtara göre sözlüksel olarak sıralanır. - Belirtilen alt anahtar için
true
değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocuktrue
değerine sahipse anahtar kelimelere göre sıralanması. - Sayısal değere sahip olan alt öğeler artan düzende sıralanır. Eğer birden fazla alt öğe, belirtilen alt öğe için aynı sayısal değere sahip anahtara göre sıralanırlar.
- Dizeler sayılardan sonra gelir ve sözlüksel olarak artan düzende sıralanır. sipariş. Belirtilen alt öğe için aynı değere sahip birden fazla alt öğe varsa bu terimler sözlüksel olarak anahtara göre sıralanır.
- Nesneler son sırada gelir ve anahtara göre sözlüksel olarak artan düzende sıralanır.
OrderByKey
Verilerinizi sıralamak için OrderByKey()
kullandığınızda veriler artan düzende döndürülür
anahtara göre.
- 32 bit tam sayı olarak ayrıştırılabilen bir anahtarı olan alt öğeler önce gelir ve artan düzende sıralanır.
- Anahtarlarında dize değeri olan alt öğeler sıradaki sırayla, sözlüksel olarak artan düzende sıralanır.
OrderByValue
OrderByValue()
kullanılırken alt öğeler değerlerine göre sıralanır. Sıralama
ölçütleri, OrderByChild()
ile aynıdır. Tek fark, düğümün değerinin
belirtilen bir alt anahtarın değeri yerine kullanılır.