我正在将两个值写入firebase数据库,如下所示
String key = mClientDatabaseReference.push().getKey();
// get user input and set it to result
// edit text
Client client = new Client( firstNameEditText.getText().toString(), lastNameEditText.getText().toString() );
mClientDatabaseReference.child( key ).child( "firstName" ).setValue( firstNameEditText.getText().toString() );
mClientDatabaseReference.child( key ).child( "lastName" ).setValue( lastNameEditText.getText().toString() );
并且一切正常,除了ChildEventListener发生的一个小烦人的事情。当调用onChildAdded时,在设置第一个名称的值后调用它,并且它不会等到第二个名称值被占用,所以我只得到第一个名称,第二个名称为null,我必须重新打开得到完整的冷杉和姓氏的活动。 这是onChildAdded
中的代码 public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Client client = dataSnapshot.getValue( Client.class );
mClientAdapter.add( client );
Log.d(TAG+"Added",dataSnapshot.getValue(Client.class).toString());
}
我该如何克服这个问题?
答案 0 :(得分:1)
您可以使用addvalueeventlistener:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("users");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String name=datas.child("firstName").getValue().toString();
String lname=datas.child("lastName").getValue().toString();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
因为您只想检索数据,所以如果您想要读取一次,请使用addvalueeventlistener或addListenerForSingleValueEvent。假设您有以下数据库:
users
userid
firstName:firstname
lastName: lastname