Displaying messages from firebase database

半腔热情 提交于 2019-12-11 02:51:43

问题


I'm creating a social messaging app. the ideal on how the app function is where the messages are saved to the firebase database and then displayed on the RecyclerView.. the messages are saved to the database but not displayed on the RecyclerView.

please help...

thank you

message adopter class.

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();
        }
    }


}

chat activity:

  @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:


hi i am fatching my massages from firebase database with this, try this it will help you :-

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();
        }
    }


来源:https://stackoverflow.com/questions/55456949/displaying-messages-from-firebase-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!