從 firebase 檢索資料

我假設你已經知道在 android studio 中新增 gradle 依賴項 firebase。如果你不是從這裡按照指南。在 firebase 控制檯中新增你的應用程式,新增依賴項後重新同步 android studio。僅 firebase 資料庫和 firebase 身份驗證不需要所有依賴項。

現在我們知道如何儲存資料以及如何新增 gradle 依賴項,讓我們看看如何使用匯入的 firebase android SDK 來檢索資料。

建立一個 firebase 資料庫引用

DatabaseReference userDBRef = FirebaseDatabase.getInstance().getReference();
// above statement point to base tree
userDBRef = DatabaseReference.getInstance().getReference().child("user_base")
// points to user_base table JSON (see previous section)

從這裡你可以連結多個 child() 方法呼叫以指向你感興趣的資料。例如,如果資料儲存如上一節所述,並且你想指向 Bruce Wayne 使用者,你可以使用:

DatabaseReference bruceWayneRef = userDBRef.child("371298");
// 371298 is key of bruce wayne user in JSON structure (previous section)

或者只是將整個引用傳遞給 JSON 物件:

DatabaseReference bruceWayneRef = DatabaseReference.getInstance().getReference()
     .child("user_base/371298");
// deeply nested data can also be referenced this way, just put the fully
// qualified path in pattern shown in above code "blah/blah1/blah1-2/blah1-2-3..."

現在我們已經獲取了要獲取的資料的引用,我們可以使用偵聽器來獲取 Android 應用程式中的資料。與使用改造或排序啟用 REST API 呼叫的傳統呼叫不同,此處需要一個簡單的回撥偵聽器來獲取資料。Firebase sdk 呼叫回撥方法,你就完成了。

基本上有兩種型別,你可以連線監聽器的,一個是 ValueEventListener ,另一種是 ChildEventListener (在下一節介紹)。對於節點下的資料的任何更改,我們有引用並新增了偵聽器,value 事件偵聽器返回整個 JSON 結構,子事件偵聽器返回發生更改的特定子節點。這兩者都以他們自己的方式有用。要從 firebase 獲取資料,我們可以將一個或多個偵聽器新增到 firebase 資料庫引用(我們之前建立的 listDBRef 列表)。

這是一些示例程式碼(程式碼後的程式碼說明):

userDBRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        User bruceWayne = dataSnapshot.child("371298").getValue(User.class);
        // Do something with the retrieved data or Bruce Wayne
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("UserListActivity", "Error occured");
        // Do something about the error
    });

你是否注意到 Class 型別已通過。 DataSnapshot 可以將 JSON 資料轉換為我們定義的 POJO,簡單傳遞正確的類型別。

如果你的用例不需要整個資料(在我們的情況下是 user_base 表),每次發生一些小的更改或者說你只想獲取資料一次,你可以使用資料庫引用的 addListenerForSingleValueEvent() 方法。這隻會觸發一次回撥。

userDBRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // Do something
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Do something about the error
    });

上面的示例將為你提供 JSON 節點的值。要獲得金鑰,只需致電:

String myKey = dataSnapshot.getKey();