【问题标题】:I am able to save data to Firebase but i can't retrieve it我能够将数据保存到 Firebase,但我无法检索它
【发布时间】:2016-07-24 11:45:13
【问题描述】:

我正在 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 语法行设置了一个断点,但控件并没有停在那里。

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    你读过文档吗?

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

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

    我认为这是问题的原因

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

    【讨论】:

    • 虽然一般不建议将监听器附加到根目录,但不会导致回调被忽略。
    【解决方案2】:

    试试这个

    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());}
          });
    

    【讨论】:

    • 我尝试在各个子级别附加 addValueEventListener,但仍然无法正常工作。
    • 我怀疑在调试我的程序时,控件必须进入 onDataChange() 或 onCancelled()。但它不会。我在 onDataChange() 和 onCancelled() fm 中的 System.out.println 语法行设置了一个断点,但控件并没有停在那里。
    • @RafiMdk 那么请在 Firebase 数据库中有数据。我工作了几次,效果很好
    【解决方案3】:

    试试这个。让我知道这是否成功

    @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());}
          });
    

    【讨论】:

      【解决方案4】:

      已解决

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

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

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

      希望对其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多