从Firebase加载数据仅首次返回null

时间:2018-03-17 23:08:43

标签: android firebase firebase-realtime-database

我正在将两个值写入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());
        }

我该如何克服这个问题?

1 个答案:

答案 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