显示来自Firebase数据库的消息 [英] Displaying messages from firebase database

查看:150
本文介绍了显示来自Firebase数据库的消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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.

请帮助...

谢谢

消息采用者类.

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



    }
}

推荐答案

您好,我正在用Firebase数据库添加按摩,尝试此操作将对您有所帮助:-

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

这篇关于显示来自Firebase数据库的消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆