首页 > 解决方案 > 未能从 firebase 获取聊天数据到 recyclerview

问题描述

我是 android studio 和 firebase 的新手,现在正在尝试制作一个简单的聊天应用程序。

我的代码可以将聊天数据发送到 firebase,但未能从 firebase 取回数据,因此应用程序中没有任何更新。

注意:没有崩溃,只是当我输入聊天时,屏幕上没有出现任何内容。

在此处输入图像描述

有人能指出我在哪里做错了吗?

这是我的代码

主要活动

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    EditText editText;
    RelativeLayout addBtn;
    DatabaseReference ref;
    FirebaseRecyclerAdapter<ChatMessage,chat_rec> adapter;
    FirebaseRecyclerOptions<ChatMessage> options;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView)findViewById(R.id.recyclerView);
        editText = (EditText)findViewById(R.id.editText);
        addBtn = (RelativeLayout)findViewById(R.id.addBtn);

        recyclerView.setHasFixedSize(true);
        final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setStackFromEnd(true);
        recyclerView.setLayoutManager(linearLayoutManager);

        ref = FirebaseDatabase.getInstance().getReference();
        ref.keepSynced(true);

        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String message = editText.getText().toString().trim();

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

                    ChatMessage chatMessage = new ChatMessage(message, "user");
                    ref.child("chat").push().setValue(chatMessage);

                }
                editText.setText("");
            }
        });

        Query text = ref.child("chat").limitToLast(100);
        options = new FirebaseRecyclerOptions.Builder<ChatMessage>().setQuery(text, ChatMessage.class).build();

        adapter = new FirebaseRecyclerAdapter<ChatMessage, chat_rec>(options) {
            @Override
            protected void onBindViewHolder(chat_rec viewHolder, int position, ChatMessage model) {
                // Bind the Chat object to the ChatHolder
                // ...

                if (model.getMsgUser().equals("user")) {
                    viewHolder.rightText.setText(model.getMsgText());

                    viewHolder.rightText.setVisibility(View.VISIBLE);
                    viewHolder.leftText.setVisibility(View.GONE);
                }
                else {
                    viewHolder.leftText.setText(model.getMsgText());

                    viewHolder.rightText.setVisibility(View.GONE);
                    viewHolder.leftText.setVisibility(View.VISIBLE);
                }

            }

            @Override
            public chat_rec onCreateViewHolder(ViewGroup parent, int viewType) {
                // Create a new instance of the ViewHolder, in this case we are using a custom
                // layout called R.layout.message for each item
                View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.msglist, parent, false);

                return new chat_rec(view);
            }

        };
        recyclerView.setAdapter(adapter);
    }
}

chat_rec.java

Public class chat_rec extends RecyclerView.ViewHolder  {
    TextView leftText,rightText;

    public chat_rec(View itemView){
        super(itemView);

        leftText = (TextView)itemView.findViewById(R.id.leftText);
        rightText = (TextView)itemView.findViewById(R.id.rightText);

    }
}

标签: androidfirebaseandroid-studiofirebase-realtime-database

解决方案


推荐阅读