2016-10-04 56 views
3

我的Firebase数据库中有超过40,000个节点。但是,无论何时我试图从Android代码中读取密钥,onDataChange方法都不会被调用。未调用Android Firebase onDataChange?

mycode的:

Firebase firebase = new Firebase(my url); 
      firebase.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 

        Log.d(TAG, "onDataChange : " + dataSnapshot); 

        if (dataSnapshot.getValue() != null) { 

         Map map = (Map) dataSnapshot.getValue(); 

         Iterator accountIterator = map.entrySet().iterator(); 
         while (accountIterator.hasNext()) { 

          Map.Entry accountPair = (Map.Entry) accountIterator.next(); 

          Log.d(TAG, "accountPair : Key : " + accountPair.getKey() + " , Value : " + accountPair.getValue()); 
         } 

        } 
       } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 
        Log.d(TAG, "onCancelled : " + firebaseError); 
       } 
      }); 

I want to retrieve Student node details

请让我知道。我无法在代码中找到任何问题。请给我一些解决方案。

+0

https://firebase.google.com/docs/database/android/retrieve-data#value_events https://github.com/firebase/quickstart-android/blob/master/database/app/src/ main/java/com/google/firebase/quickstart/database/PostDetailActivity.java –

+0

**你的数据库引用似乎是错误的。**此外,valueEventListener在引用键的值发生变化时被调用。但我没有看到任何这样的参考。如果这只是一个错误,请更新那部分问题。 –

+0

@NishantDubey没有引用是完美的,我检查了引用url,它在浏览器中工作正常,所以代码中出现了什么问题?请帮助 – MyQuestion

回答

2

首先要做的是检查您是否拥有从数据库中读取的正确权限。去 https://console.firebase.google.com/project/[your_database_url]/database/rules并检查。在产品不理想,但为测试您可以设置读为真

{ 
    "rules": { 
    ".read": true, 
    ".write": "auth != null" 
    } 
    } 

下一个问题是要记住,侦听器是异步火灾和忘记调用。因此,一旦在onDataChange()方法中接收到数据,就应该对数据进行任何操作。

相关问题