我可以将数据保存到Firebase但我无法检索它

时间:2016-07-24 11:45:13

标签: java android firebase firebase-realtime-database

我正在Android studio中开发一个新的应用程序。我使用setvalue将我的数据保存到Firebase数据库,没有任何问题。但是,当我尝试从Firebase检索数据时,将addValueEventListener附加到根引用,如下所示,即使OnDataChange()未被调用也未调用onCancelled()

我会错过任何有用的建议。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    mDatabase = FirebaseDatabase.getInstance().getReference();
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            System.out.println(snapshot.getValue()); }


            @Override
        public void onCancelled(DatabaseError firebaseError) {
      System.out.println("The read failed: " + firebaseError.getMessage());}
      });

我的疑问是在调试我的程序时,控件必须进入onDataChange()或onCancelled()。但事实并非如此。我在onDataChange()和onCancelled()fm中的断言处放置了System.out.println语法的断点,但控件并没有停在那里。

4 个答案:

答案 0 :(得分:0)

你读过文档吗?

  

重要事项:每次数据都会调用onDataChange()方法   在指定的数据库引用处更改,包括对其的更改   儿童。要限制快照的大小,请仅在附件处附加   观看变化所需的最高级别。例如,附加一个   建议不要监听数据库的根目录。

https://firebase.google.com/docs/database/android/retrieve-data

我认为这是问题的原因

其他一切看起来很好,除了System.out,我不确定它是否会起作用,android拥有它自己的日志工具。试试Log.e

答案 1 :(得分:0)

试试这个

mDatabase.child("your table name here").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            System.out.println(snapshot.getValue()); }


            @Override
        public void onCancelled(DatabaseError firebaseError) {
      System.out.println("The read failed: " + firebaseError.getMessage());}
      });

答案 2 :(得分:0)

试试这个。如果这次成功,请告诉我

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    mDatabase = FirebaseDatabase.getInstance().getReference();
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            System.out.println(dataSnapshot.getValue().toString()); }


            @Override
        public void onCancelled(DatabaseError firebaseError) {
      System.out.println("The read failed: " + firebaseError.getMessage());}
      });

答案 3 :(得分:-1)

解决

我尝试创建新项目,保存和检索Firebase数据库中的数据没有任何问题。

然后我发现我遇到问题的项目是我从传统的firebase.com控制台导入的。我删除了应用级构建gradle中的以下行,根据新的Firebase文档弃用了该行,然后它运行良好。

    packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE-FIREBASE.txt'
    exclude 'META-INF/NOTICE'
    }

希望它对别人有所帮助。