尽管写得不好并且无法显示[关闭],但是没有从火基数据库中取出聊天记录

问题描述 投票:1回答:2

我已经正确地进行了聊天,并且它正在向fire-base数据库发送数据,但现在问题是检索消息,代码运行正常,但仍然无法弄清楚为什么没有显示聊天

试图添加获取消息功能但仍然看不到任何更改

我的获取消息功能

 //retrieve messages
    private void FetchMessages() {
    rootReference.child("Messages")
            .child(messageSenderID)
            .child(messageReceiverID)
            .addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    if (dataSnapshot.exists()){
                        Messages messages = dataSnapshot.getValue(Messages.class);
                        messageList.add(messages);

                        messageAdapter.notifyDataSetChanged(); //whenever new message is added it will be displayed
                    }
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
    }

我如何初始化字段

//initialize the above variables
    private void InitializeFields() {

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //connect chat custom bar to chat activity
        ActionBar actionBar = getSupportActionBar();
        Objects.requireNonNull(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_toolbar, null);
        actionBar.setCustomView(action_bar_view);

        receiverName = findViewById(R.id.custom_profile_name);
        receiverProfileImage = findViewById(R.id.custom_profile_image);

        sendMessageButton = findViewById(R.id.send_message_button);
        userMessageInput = findViewById(R.id.input_message);


        messageAdapter = new MessagesAdapter(messageList);
        userMessagesList = findViewById(R.id.messages_list_of_users);
        linearLayoutManager = new LinearLayoutManager(this);
        userMessagesList.setHasFixedSize(true);
        userMessagesList.setLayoutManager(linearLayoutManager);
        userMessagesList.setAdapter(messageAdapter);

    }

我的On方法


  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        overridePendingTransition(R.anim.fadein, R.anim.fadeout);

        mAuth = FirebaseAuth.getInstance();
        messageSenderID = mAuth.getCurrentUser().getUid();

        rootReference = FirebaseDatabase.getInstance().getReference();

        //receive user id and name from other parents profile
        messageReceiverID = getIntent().getExtras().get("visit_user_id").toString();
        //messageReceiverName = getIntent().getExtras().get("userName").toString();

        InitializeFields();

        DisplayReceiverInformation();

        sendMessageButton.setOnClickListener(v -> SendMessage());

        FetchMessages();
    }

android xml firebase firebase-realtime-database chat
2个回答
0
投票

我认为您没有返回正确的邮件列表大小。请确保在getItemCount()方法中你返回someList.size()除了0


0
投票

我也正在开发聊天应用程序,我正在以这种方式提取按摩: -

private void readMessage(final String myId, final String userId) {
       ArrayList<Chat> mChat = new ArrayList<>();
       DatabaseReference 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();
        }
    }  
© www.soinside.com 2019 - 2024. All rights reserved.