【问题标题】:Getting error while retrieving data from firebase从 firebase 检索数据时出错
【发布时间】:2021-06-30 23:07:20
【问题描述】:

我正在使用 Firebase 进行 Android 开发。

我正在尝试从 Firebase 实时数据库中检索数据。

这是我的代码:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ValueEventListener postListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // Get Post object and use the values to update the UI
                Post post = dataSnapshot.getValue(Post.class);
                // ..
            }
        };
        database_ref.addValueEventListener(postListener);
    }
}

我收到此错误:

类“从 ValueEventListener 派生的匿名类”必须声明为抽象或在“ValueEventListener”中实现抽象方法“onCancelled(DatabaseError)”

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    错误似乎很明显。您的 IDE 一定会给您错误,您只覆盖了 OnDataChanged() 而不是 onCancelled()

    在实时数据库中获取实时更改的示例是:

    ValueEventListener postListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // Get Post object and use the values to update the UI
        Post post = dataSnapshot.getValue(Post.class);
        // ..
    }
    
    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
    }};  mPostReference.addValueEventListener(postListener);
    

    来自官方文档的代码 sn-p - Read and Write Data

    【讨论】:

    • 现在我得到:无法解析符号“发布”
    • Post 只是一个 java POJO 对象,仅用作示例。我建议您阅读以下有关 android 的官方入门指南:Getting Started
    【解决方案2】:

    您只覆盖了 onDataChange() 方法,还必须覆盖 onCancelled() 方法。

    【讨论】:

      【解决方案3】:

      ValueEventListener 有 2 个方法,第一个是 onDataChange(),第二个是 onCancelled。将此添加到您的 ValueEventListener 中:

          public class MainActivity extends AppCompatActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          ValueEventListener postListener = new ValueEventListener() {
              @Override
              public void onDataChange(DataSnapshot dataSnapshot) {
                  // Get Post object and use the values to update the UI
                  Post post = dataSnapshot.getValue(Post.class);
                  // ..
              }
              @Override
              public void onCancelled(@NonNull DatabaseError error) {
              //onCancelled
              }
          };
          database_ref.addValueEventListener(postListener);
      }
      

      }

      【讨论】:

      • 现在我得到:无法解析符号“发布”
      猜你喜欢
      • 1970-01-01
      • 2020-10-26
      • 2020-04-15
      • 2021-02-08
      • 1970-01-01
      • 2020-08-25
      • 2020-06-14
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多