Java 从Firebase加载数据第一次仅返回null
我正在将两个值写入firebase数据库,如下所示Java 从Firebase加载数据第一次仅返回null,java,android,firebase,firebase-realtime-database,Java,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()
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时,它在设置第一个名称的值之后被调用,并且它不会等到第二个名称值被sat,因此我只得到第二个名称为null的第一个名称,并且我必须重新打开活动以获得完整的firs和last name。
这是OnChildaded中的代码
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());
}
如何解决此问题?您可以使用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
但是我如何才能做到这一点呢?它是一个在监听器内部的监听器,并且每次添加值时都会进行更新……是否可以以某种方式将这些值添加到一行中?能否将代码
onchildaded
?答案让我想到了将值监听器放在on-child-added中,并捕获其值被setValue()呈现为null的子对象更新它。它起作用了。我不明白为什么。还没有,我正在尝试一些东西,如果它不起作用,我会试试这个…不过再次谢谢