ValueEventListener有两个方法,第一个是onDataChange((,第二个是onCancelled。将其添加到您的ValueEventListener:中
我正在使用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(">
错误似乎非常明显。您的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);
此处的官方文档代码片段-读写数据
您只覆盖了onDataChange((-方法,还必须覆盖onCancelled((-方式。
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);
}
}