显示来自Firebase的消息的代码出了什么问题?

时间:2018-08-08 07:30:15

标签: android firebase firebase-realtime-database

我正在尝试将Firebase数据库中收到的消息显示给所需的用户。

user1发送的文本会在其设备上正确显示,即使该消息到达了Firebase数据库,也不会在user2设备上显示。这是主要问题。

我正在使用以下代码检查新邮件:

private void checkMessage(){

        final DatabaseReference rRef = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference uRef = rRef.child("users");
        final DatabaseReference mRef = uRef.child(toUid);
        final DatabaseReference kRef = mRef.child("rec_msg");

        kRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                if(mAuth.getCurrentUser().getUid().equals(toUid)) {
                    Map map = (Map) dataSnapshot.getValue();
                    assert map != null;
                    String message = map.get("rec_msg").toString();
                    addMessageBox(message, 2);
                }

            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                if(mAuth.getCurrentUser().getUid().equals(toUid)) {
                    Map map = (Map) dataSnapshot.getValue();
                    assert map != null;
                    String message = map.get("rec_msg").toString();
                    addMessageBox(message, 2);
                }

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

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

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.i("Error", databaseError.getDetails());
            }
        });

打印框并在屏幕上显示文本的代码如下:

private void addMessageBox(String message, int type){

            TextView tv = new TextView(Main5Activity.this);
            tv.setText(message);
            tv.setPadding(20, 30, 30, 20);
            tv.setTextSize(1, (float) 20.1);

            LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            lp2.weight = 1.0f;

            if (type == 1) {
                lp2.gravity = Gravity.END;
                tv.setBackgroundResource(R.drawable.rounded_rectangle_grey);

            } else {
                lp2.gravity = Gravity.START;
                tv.setBackgroundResource(R.drawable.rounded_rectangle_violet);
            }

            tv.setLayoutParams(lp2);
            layout.addView(tv);
            scrollView.fullScroll(ScrollView.FOCUS_DOWN);

    }

发送按钮代码如下:

send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String meText = message.getText().toString();


                if (!meText.equals("")) {

                    addMessageBox(meText, 1);
                    storeToUID(toUid, fromUid);
                    sendMessage(message.getText().toString(), toUid);
                    checkMessage();

                }
                message.setText("");

            }
        });

数据库看起来像这样:

database

“ sendMessage()”和“ storeToUID()”仅将值存储在Firebase数据库中。

此外,如果未在“发送”按钮的侦听器代码中添加“ checkMessage()”,则会使应用程序崩溃。

我应该在哪里以及如何放置checkMessage()代码以使应用程序正常运行?

0 个答案:

没有答案