这是我的Firebase聊天结构(请参见下图)。我只想获取amitpal_name值而不是其他值,但是此方法将我的所有值都提取了
我也曾经用过dbreference= FirebaseDatabase.getInstance().getReference( "ChatMessage" ).child( "msg");
dbreference.orderByChild("Ref").addChildEventListener( new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {[![enter image description here][1]][1]
Iterator iterator=dataSnapshot.getChildren().iterator();
while (iterator.hasNext()){
String chatis=(String) ((DataSnapshot)iterator.next()).getValue();
Log.e( "ADDED IS-" , chatis);
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Iterator iterator=dataSnapshot.getChildren().iterator();
while (iterator.hasNext()){
String chatis=(String) ((DataSnapshot)iterator.next()).getValue();
Log.e( "ADDED chng-" , chatis);
}
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e( "ERRO FBDB-", databaseError.getMessage());
}
} );
dbreference = FirebaseDatabase.getInstance()。getReference(“ ChatMessage”).child(“ msg”)。child(“ amitpal_name”);
但它没有提供任何信息或值,请在这里帮助我
我也尝试了以下方法给我很好的预期结果,但是主要问题是,当我在不使用服务的情况下在firebaserealtime Chat中更新数据库时,我想在listview中反映新值,为此我需要以下方法
公共无效onChildChanged(@NonNull DataSnapshot dataSnapshot,@Nullable String s)
最佳答案
这是您的参考
refAmitPat = FirebaseDatabase.getInstance().getReference().child("ChatMessage").child("msg");
这是您的数据库参考上的子事件列表器
refAmitPat.child("amitpal_name").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d("amitPal",dataSnapshot.getValue()+"");
// add message value to list and call notify datasetchange method
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d("amitPal",dataSnapshot.getValue()+"");
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
您正在做什么,错的是,您正在迭代数据快照,而当您将消息作为用户的身份推送到用户名下时,该子对象将作为childAdded方法中的datasnapshot获得,这意味着您正在迭代的数据快照实际上是通过push-键和消息值。因此无需进行遍历。只需调用datasnapshot.getValue()函数即可获取消息值
关于android - Firebase Realtime数据库getvalue()未映射对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55016979/