显示来自Firebase数据库的消息

时间:2019-04-01 13:59:06

标签: android firebase-realtime-database android-recyclerview

我正在创建一个社交消息应用程序。  将消息保存到Firebase数据库,然后在RecyclerView上显示的方式是应用功能的理想选择。消息已保存到数据库,但不显示在RecyclerView上。

请帮助...

谢谢

消息采用者类。

public class MessagesAdopter extends RecyclerView.Adapter {
    public MessagesAdopter(List<Messages> messagesList) {

    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public class MessageAdopter extends RecyclerView.Adapter<MessageAdopter.MessageViewHolder> {
        private List<Messages> usersmessengeslist;
        private FirebaseAuth mAuth;
        private DatabaseReference userdatabaseref;

        public MessageAdopter (List<Messages> usersmessengeslist){
            this.usersmessengeslist = usersmessengeslist;
        }


        public class MessageViewHolder extends RecyclerView.ViewHolder {

            private TextView sender_typed_message,reciever_typed_message;
            CircleImageView reciever_image_view;
            public MessageViewHolder(@NonNull View itemView) {
                super(itemView);

                sender_typed_message = itemView.findViewById(R.id.sender_typed_message);
                reciever_typed_message = itemView.findViewById(R.id.reciever_typed_message);
                reciever_image_view = itemView.findViewById(R.id.reciver_profile_image);
            }
        }

        @NonNull
        @Override
        public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View V = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.users_message_layout,parent ,false);

            mAuth = FirebaseAuth.getInstance();

            return new MessageViewHolder(V);
        }

        @Override
        public void onBindViewHolder(@NonNull final MessageViewHolder holder, int position) {
            String messagesenderid = mAuth.getCurrentUser().getUid();
            Messages messages = usersmessengeslist.get(position);

            String fromUserID = messages.getFrom();
            String frommessagetype = messages.getType();

            userdatabaseref = FirebaseDatabase.getInstance().getReference().child("Users").child(fromUserID);
            userdatabaseref.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){
                        String image = dataSnapshot.child("profileimage").getValue(String.class);
                        Picasso.get().load(image).placeholder(R.drawable.profile).into(holder.reciever_image_view);
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

            if (frommessagetype.equals("text")){
                holder.reciever_image_view.setVisibility(View.INVISIBLE);
                holder.reciever_typed_message.setVisibility(View.INVISIBLE);

                if (fromUserID.equals(messagesenderid)){
                    holder.sender_typed_message.setBackgroundResource(R.drawable.sender_message_background);
                    holder.sender_typed_message.setTextColor(Color.WHITE);
                    holder.sender_typed_message.setGravity(Gravity.LEFT);
                    holder.sender_typed_message.setText(messages.getMessage());

                }
                else
                    {
                    holder.sender_typed_message.setVisibility(View.INVISIBLE);

                    holder.reciever_typed_message.setVisibility(View.VISIBLE);
                    holder.reciever_image_view.setVisibility(View.VISIBLE);

                    holder.reciever_typed_message.setBackgroundResource(R.drawable.reciever_message_background);
                    holder.reciever_typed_message.setTextColor(Color.WHITE);
                    holder.reciever_typed_message.setGravity(Gravity.LEFT);
                    holder.reciever_typed_message.setText(messages.getMessage());
                }
            }

        }

        @Override
        public int getItemCount() {
            return usersmessengeslist.size();
        }
    }


}

聊天活动:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        mAuth = FirebaseAuth.getInstance();
        messagesenderuserIdD = mAuth.getCurrentUser().getUid();
        RootRef = FirebaseDatabase.getInstance().getReference();
        recievereruserid = getIntent().getExtras().get("visit_user_id").toString();
        recieverrusername = getIntent().getExtras().get("userName").toString();

        iniitializefeildz();
        displayrecieveruserinformtion();
        sendmessagebutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendusermessage();
            }
        });

        fetchmessage();

    }

    private void fetchmessage() {
        RootRef.child("Messages").child(messagesenderuserIdD).child(recievereruserid)
                .addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        Messages messages = dataSnapshot.getValue(Messages.class);
                        mMessagesList.add(messages);
                        MessagesAdopter.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) {

                    }
                });
    }

    private void sendusermessage() {
        String messagetext = user_inout_message.getText().toString();

        if (TextUtils.isEmpty(messagetext)){
            Toast.makeText(chatActivity.this,"please type a message",Toast.LENGTH_SHORT).show();
        }
        else {
            String message_sender_ref = "Messages/" + messagesenderuserIdD + "/" + recievereruserid;
            String message_reciever_ref = "Messages/" + recievereruserid + "/" + messagesenderuserIdD;

            DatabaseReference user_message_key = RootRef.child("Message").child(messagesenderuserIdD).child(recievereruserid).push();

            String message_push_id =user_message_key.getKey();

            Calendar callforddate = Calendar.getInstance();
            SimpleDateFormat currentdate =new SimpleDateFormat("dd-MMMM-yyyy");
            savecurrentdate= currentdate.format(callforddate.getTime());

            Calendar calFordTime = Calendar.getInstance();
            SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm");
            savecurrenttime = currentTime.format(callforddate.getTime());

            Map messageTextbody = new HashMap();
            messageTextbody.put("Message", messagetext);
            messageTextbody.put("time", savecurrenttime);
            messageTextbody.put("date", savecurrentdate);
            messageTextbody.put("type", "text");
            messageTextbody.put("from", messagesenderuserIdD);

            Map messageBodyDetails = new HashMap();
            messageBodyDetails.put(message_sender_ref + "/"+ message_push_id,messageTextbody);
            messageBodyDetails.put(message_reciever_ref + "/"+ message_push_id,messageTextbody);

            RootRef.updateChildren(messageBodyDetails).addOnCompleteListener(new OnCompleteListener() {
                @Override
                public void onComplete(@NonNull Task task) {
                    if (task.isSuccessful()){
                        Toast.makeText(chatActivity.this,"message sent successfully",Toast.LENGTH_SHORT).show();
                        user_inout_message.setText("");
                    }
                    else {
                        String message = task.getException().getMessage();
                        Toast.makeText(chatActivity.this,"Error" + message,Toast.LENGTH_SHORT).show();
                        user_inout_message.setText("");

                    }



                }
            });





        }

    }

    private void displayrecieveruserinformtion() {

        chat_username.setText(recieverrusername);
        RootRef.child("Users").child(recievereruserid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists()){
                    final String profileimage = dataSnapshot.child("profileimage").getValue(String.class);
                    Picasso.get().load(profileimage).placeholder(R.drawable.profile).into(chat_circular_imageview);
                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }

    private void iniitializefeildz() {
        mToolbar = findViewById(R.id.action_cjat_bar);
        setSupportActionBar(mToolbar);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowCustomEnabled(true);
        LayoutInflater layoutInflater= (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View action_bar_view = layoutInflater.inflate(R.layout.chat_custom_appbar,null);
        actionBar.setCustomView(action_bar_view);


        chat_username = findViewById(R.id.user_chat_displayname);
        chat_circular_imageview = findViewById(R.id.user_chat_displayimage);

        user_inout_message= findViewById(R.id.chat_write_message_here);
        sendmessagebutton = findViewById(R.id.send_chat_message);
        sendimagemessage = findViewById(R.id.chat_chooseimage);


        MessagesAdopter = new MessagesAdopter(mMessagesList);
        messagesview = findViewById(R.id.messageview_list);
        linearlayoutmanager = new LinearLayoutManager(this);
        messagesview.setHasFixedSize(true);
        messagesview.setLayoutManager(linearlayoutmanager);
        messagesview.setAdapter(MessagesAdopter);



    }
}

1 个答案:

答案 0 :(得分:0)

嗨,我正在用Firebase数据库添加我的按摩,尝试用它可以帮助您:-

private void readMessage(final String myId, final String userId) {
        mChat = new ArrayList<>();
        reference = FirebaseDatabase.getInstance().getReference(chatTableName);
        try {
            reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    mChat.clear();
                    Chat chat = null;
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        chat = snapshot.getValue(Chat.class);
                        assert chat != null;
                        if (chat.getReceiver().equals(myId) && chat.getSender().equals(userId) ||
                                chat.getReceiver().equals(userId) && chat.getSender().equals(myId)) {
                            mChat.add(chat);
                        }
                        adapter = new MessageAdapter(UserMessageActivity.this, mChat);
                        recyclerView.setAdapter(adapter);
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        } catch (Exception e) {
            Toast.makeText(this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }