2016-02-10 53 views
3

我在使用Firebase的應用程序中工作,我嘗試使用onChildAdded()回調,但我認爲我做錯了什麼,因爲我沒有得到任何迴應。Android:Firebase ChildEventListener()不工作

/** 
* Constructor 
*/ 
private FirebaseManager(Context context) { 
    Firebase.setAndroidContext(context); 
    Firebase.getDefaultConfig().setPersistenceEnabled(true); 
    mFirebaseRef = new Firebase(FIREBASE_URL); 
} 

public void checkUsers() { 
    Firebase checkRef = mFirebaseRef.child("/data/users/"); 
    // Also tried 
    // Firebase checkRef = mFirebaseRef.child("data").child("users"); 
    checkRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      Log.d(TAG,"New child added"); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 


    }); 
} 

在的onCreate()我的MainActivity的我驗證用戶和呼叫checkUsers()。之後,我手動在數據庫中添加一個新用戶。但我沒有記錄任何東西。 這是JSON結構:

enter image description here

我在做什麼錯?

回答

0

我明白了。有一個concurrency problem。我在MainActivityonCreate()中調用checkUsers(),但它需要在onAuthenticated()中調用,因爲用戶在方法checkUsers()嘗試設置偵聽器後進行了身份驗證。

我有一個關於數據庫訪問的故障日誌:

W/SyncTree: Listen at/failed: FirebaseError: Permission denied 

,但因爲我是在與logcat的搜索特定的標籤並沒有看到它。

+0

這確實是一個常見的錯誤:如果您需要進行身份驗證以允許讀取某些內容,則應該只在*驗證完成後附加偵聽器*。 'onAuthenticated()'處理程序非常適合。 –

+0

@FrankvanPuffelen我處於學習階段與Android和Firebase只是我正在使用的第二個BaaS。我在一個月前試過解析,但這個消息讓我繼續前進。 –