Java 我正在尝试创建一个聊天活动,用户可以在其中进行个人聊天。但是有些人不知道如何从数据库中检索单个数据
我正在尝试创建聊天活动,并尝试从firebase检索所有消息。当我发送消息时,该消息已存储在firebase中,但在接收时,收到了一条消息。我无法理解我的代码中的问题 personalChat.java//onstart方法Java 我正在尝试创建一个聊天活动,用户可以在其中进行个人聊天。但是有些人不知道如何从数据库中检索单个数据,java,android,firebase-realtime-database,Java,Android,Firebase Realtime Database,我正在尝试创建聊天活动,并尝试从firebase检索所有消息。当我发送消息时,该消息已存储在firebase中,但在接收时,收到了一条消息。我无法理解我的代码中的问题 personalChat.java//onstart方法 protected void onStart() { super.onStart(); rootRef.child("Message").child(CurrentUserId).child(msgReciverId).addChildEventListe
protected void onStart() {
super.onStart();
rootRef.child("Message").child(CurrentUserId).child(msgReciverId).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
message cMessage = dataSnapshot.getValue(message.class);
messageList.add(cMessage);
messageAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
message_adapter.java
public class message_adapter extends RecyclerView.Adapter<message_adapter.MessageViewHolder> {
private List<message> usermsgList;
private FirebaseAuth mAuth;
private DatabaseReference userref;
public message_adapter(List<message> usermsgList){
this.usermsgList = usermsgList;
}
@NonNull
@Override
public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.coustommsglayout,parent,false);
mAuth = FirebaseAuth.getInstance();
return new MessageViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MessageViewHolder holder, int position) {
String msgsenderid = mAuth.getCurrentUser().getUid();
message Message = usermsgList.get(position);
String fromuserid = Message.getFfrom();
String fromMessageType = Message.getType();
userref = FirebaseDatabase.getInstance().getReference().child("User").child(fromuserid);
userref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild("image")){
String reciverimage = dataSnapshot.child("image").getValue().toString();
//Picasso.get().load(reciverimage).into(holder.reciverProfileImage);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
if (fromMessageType.equals("Text")){
holder.recivermsgtext.setVisibility(View.INVISIBLE);
holder.reciverProfileImage.setVisibility(View.INVISIBLE);
if (fromuserid.equals(msgsenderid)){
holder.sendermsgtext.setBackgroundResource(R.drawable.sendermsglayout);
holder.sendermsgtext.setText(Message.getMessage());
}else{
holder.sendermsgtext.setVisibility(View.INVISIBLE);
holder.recivermsgtext.setVisibility(View.VISIBLE);
holder.reciverProfileImage.setVisibility(View.VISIBLE);
holder.recivermsgtext.setBackgroundResource(R.drawable.recivermsglayout);
holder.recivermsgtext.setText(Message.getMessage());
}
}
}
@Override
public int getItemCount() {
return usermsgList.size();
}
public class MessageViewHolder extends RecyclerView.ViewHolder{
public TextView sendermsgtext,recivermsgtext;
public CircleImageView reciverProfileImage;
public MessageViewHolder(@NonNull View itemView){
super(itemView);
sendermsgtext = (TextView) itemView.findViewById(R.id.sender);
recivermsgtext = (TextView) itemView.findViewById(R.id.reciver);
reciverProfileImage = (CircleImageView) itemView.findViewById(R.id.profile_msg_dp);
}
}
}
如果在
message cMessage=dataSnapshot.getValue(message.class)上设置断点
并在调试器中运行代码,断点是否会被多次命中?还有两件事:1)请用实际的JSON(文本形式,无屏幕截图)替换数据的示意图表示。您可以通过单击溢出菜单中的“导出JSON”链接来实现这一点(⠇) 在.2)上,userref.addValueEventListener
可能应该是userref.addListenerForSingleValueEvent
。它不会修复您当前的问题,因此会将其发布在评论中,但会防止后续出现更多问题。
Message
JsmvpdGLjLbg9mQ0TfmKForis5q2
PnYKrGiS7YUp9JdHNDMurOSbGBw1
-LoHAND5o_T8S2NRECAH
ffrom: "JsmvpdGLjLbg9mQ0TfmKForis5q2"
message: "hello"
type: "Text"
-LoJCo9T7IrkHxD5xlZR
ffrom: "JsmvpdGLjLbg9mQ0TfmKForis5q2"
message: "whtsup"
type: "Text"
-LoJE04JSfl3BPyU3r9T
ffrom: "JsmvpdGLjLbg9mQ0TfmKForis5q2"
message: "wtsup"
type: "Text"