java - 无需从 Firebase 进行更改即可获取孩子
问题描述
在我的应用程序中,我想实现一个聊天功能。对于每个聊天,都会创建一个唯一的聊天 ID,需要在开始时获取该聊天 ID。我阅读了有关使用ListenerForSingleValueEvent()
获取 a 的信息dataSnapshot
,但似乎只有在数据发生更改时才能达到。如何在不需要更改某些内容的情况下从孩子那里获取数据?
像这样,我没有得到我的聊天 ID:
public class ChatActivity extends AppCompatActivity {
String chatId;
DatabaseReference mDatabaseUser, mDatabaseChat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("Users").child("ChatId");
mDatabaseChat = FirebaseDatabase.getInstance().getReference().child("Chat");
getChatId();
}
private void getChatId(){
mDatabaseUser.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
chatId = dataSnapshot.getValue().toString();
mDatabaseChat = mDatabaseChat.child(chatId);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
解决方案
您可以使用 addValueEventListner 方法从 firebase 实时数据库中获取值。
private void getChatId() {
DatabaseReference firebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(dbPath);
//dbPath is the path of the data stored in firebase required to receive
firebaseDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//your code here
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
请参阅Firebase 文档
推荐阅读
- shell - 使用 docker run 命令“执行格式错误”
- python - 基于最大元素创建新数据框
- html - 为什么 css 中的溢出会延迟工作?
- html - 如何在 HTML CSS 网格上定位“覆盖矩形”,但从列边界水平偏移?(根据我的图像)
- message - RosAria 节点不接收消息
- laravel - lararave intervention image upload slow code review
- python - json 编码器 json.dump 和 json.dumps 的不同结果
- javascript - Move dynamically generated content to the top of the page on click. Vue.js
- automated-tests - Specflow+ tests don't appear in Resharper unit test explorer
- string - Split string in PowerShell by pattern