【发布时间】:2020-05-05 08:24:58
【问题描述】:
我成功地在应用的布局中加载了每个用户特定的 UID。这是图片:
在注册时,我还将用户的电子邮件和密码保存到“用户”节点下的数据库中。这是数据库截图:
可以清楚地看到,所有的消息都保存在“MessageTest”节点下,而用户名和电子邮件保存在“用户”节点下。
这是将姓名和电子邮件保存到数据库的模型类:
public class GetUserName {
String name,email;
public GetUserName(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
这是我的 ChatModel 类:
public class ChatModel {
String messages;
String username;
public ChatModel() {
}
public ChatModel(String messages, String username) {
this.messages = messages;
this.username = username;
}
public String getMessages() {
return messages;
}
public void setMessages(String messages) {
this.messages = messages;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
这是当用户输入消息并点击发送按钮时执行的代码:
private void postMessages() {
DatabaseReference database = FirebaseDatabase.getInstance().getReference("MessageTest");
Log.e("Reference is : ", String.valueOf(databaseReference));
String actual_msg = editText.getText().toString().trim();
if (actual_msg.matches("")) {
new AlertDialog.Builder(ChatActivity.this)
.setTitle("Failed")
.setMessage("Enter all fields/check Internet Connection")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}).show();
} else {
ChatModel chatModel = new ChatModel(actual_msg, mAuth.getUid());
String id = database.push().getKey();
database.child(id).setValue(chatModel).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(ChatActivity.this, "Message Sent Successfully", Toast.LENGTH_SHORT).show();
editText.setText("");
} else {
Toast.makeText(ChatActivity.this, "Message Sent Failed !", Toast.LENGTH_SHORT).show();
}
}
这是消息的加载方式:
private void loadMessages() {
msgRef = FirebaseDatabase.getInstance().getReference("MessageTest");
Log.e("path1", msgRef.toString());
msgRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
chatModelList = new ArrayList<>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
ChatModel p = dataSnapshot1.getValue(ChatModel.class);
chatModelList.add(p);
}
FirebaseRecyclerOptions<ChatModel> options =
new FirebaseRecyclerOptions.Builder<ChatModel>()
.setQuery(FirebaseDatabase.getInstance().getReference("MessageTest"), ChatModel.class)
.build();
chatAdapter = new ChatAdapter(options, ChatActivity.this, chatModelList);
chatAdapter.startListening();
chatAdapter.notifyDataSetChanged();
recyclerView.setAdapter(chatAdapter);
String current_counts = String.valueOf(dataSnapshot.getChildrenCount());
recyclerView.setAdapter(chatAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(ChatActivity.this));
}
这是 ChatAdapter 的onBind():
@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull ChatModel model) {
ChatModel model1 = chatModelList.get(position);
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
holder.messages.setText(model1.getMessages());
holder.userName.setText(model1.getUsername());
}
我已经尝试了所有方法,但无法将 UID 替换为用户名。
【问题讨论】:
-
@Stratubas 已添加先生,请检查
-
@Rohit 你能更准确地解释你要检索哪个节点吗?
-
@Ashish 是的,先生,如上面的屏幕截图所示,当用户发布消息时,您可以看到与消息一起显示的 UID。我只是想用“用户”节点中的名称替换发布消息的用户的 UID。
-
@Rohit 请检查我的回答
标签: android authentication firebase-realtime-database firebase-authentication chat