我无法从Firebase实时数据库中将数据检索到字符串变量中

NTx23

我的代码如下所示。我是这一行的新手,所以对您的帮助表示感谢。

@Override
    public void onStart() {
        super.onStart();

        FirebaseRecyclerOptions<Contacts> options = new FirebaseRecyclerOptions.Builder<Contacts>().setQuery(ChatsRef, Contacts.class).build();
        FirebaseRecyclerAdapter<Contacts, ChatsViewHolder> adapter = new FirebaseRecyclerAdapter<Contacts, ChatsViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull final ChatsViewHolder holder, int position, @NonNull Contacts model) {
                final String usersIDs = getRef(position).getKey();
                final String[] retImage = {"default_image"};

                UsersRef.child(usersIDs).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists())  {
                            if (dataSnapshot.hasChild("image")) {
                                retImage[0] = dataSnapshot.child("image").getValue().toString();
                                Picasso.get().load(retImage[0]).into(holder.profileImage);
                            }

                            final String retName = dataSnapshot.child("name").getValue().toString();

                            holder.userName.setText(retName);

                            if (dataSnapshot.child("userState").hasChild("state")) {
                                String state = dataSnapshot.child("userState").child("state").getValue().toString();

                                if (state.equals("online")) {
                                    holder.onlineIcon.setVisibility(View.VISIBLE);
                                }
                                else if (state.equals("offline")) {
                                    holder.onlineIcon.setVisibility(View.INVISIBLE);
                                }
                            }

                            else {
                                holder.onlineIcon.setVisibility(View.INVISIBLE);
                            }

// i am having trouble from this portion onwards

                            final String[] retLastMessage = {null};
                            final String[] retLastMessageTime = {null};
                            final String[] retLastMessageDate = {null};

                            RootRef.child("Contacts").child(currentUserID).child(usersIDs).addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                                    if (dataSnapshot.hasChild("LastMessage")) {
                                        retLastMessage[0] = dataSnapshot.child("LastMessage").getValue().toString();
                                        retLastMessageTime[0] = dataSnapshot.child("LastMessageTime").getValue().toString();
                                        retLastMessageDate[0] = dataSnapshot.child("LastMessageDate").getValue().toString();
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {
                                }
                            });

                            holder.userLastMessage.setText(retLastMessage[0]);

                            String retLastMessageTimeDate = retLastMessageTime[0] + " " + retLastMessageDate[0];

                            holder.userLastMsgTime.setVisibility(View.VISIBLE);
                            holder.userLastMsgTime.setText(retLastMessageTimeDate);
//upto this I guess


                            holder.itemView.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    Intent chatIntent = new Intent(getContext(), ChatActivity.class);
                                    chatIntent.putExtra("visit_user_id", usersIDs);
                                    chatIntent.putExtra("visit_user_name", retName);
                                    chatIntent.putExtra("visit_image", retImage[0]);
                                    startActivity(chatIntent);
                                }
                            });
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }

            @NonNull
            @Override
            public ChatsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout, viewGroup, false);
                return new ChatsViewHolder(view);
            }
        };
        chatsList.setAdapter(adapter);
        adapter.startListening();
    }

尝试从Firebase检索这些数据时,应用程序崩溃,请提供帮助。我正在使用上面的代码实际获取最终消息和最后消息的时间,以在我的应用程序的聊天片段中显示它。最后一条消息和最后一条消息时间保存在联系人节点中,这就是数据库条目的外观

NTx23

稍微更改代码后,应用程序运行平稳

更改后的代码为:


                            final String[] retLastMessage = {null};
                            final String[] retLastMessageTime = {null};
                            final String[] retLastMessageDate = {null};

                            DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Contacts").child(currentUserID).child(usersIDs);

                            reference.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                    if (dataSnapshot.hasChild("LastMessage")) {
                                        retLastMessage[0] = dataSnapshot.child("LastMessage").getValue().toString();
                                        retLastMessageTime[0] = dataSnapshot.child("LastMessageTime").getValue().toString();
                                        retLastMessageDate[0] = dataSnapshot.child("LastMessageDate").getValue().toString();

                                        holder.userLastMessage.setVisibility(View.VISIBLE);
                                        holder.userLastMessage.setText(retLastMessage[0]);
                                        String retLastMessageTimeDate = retLastMessageTime[0] + " " + retLastMessageDate[0];

                                        holder.userLastMsgTime.setVisibility(View.VISIBLE);
                                        holder.userLastMsgTime.setText(retLastMessageTimeDate);
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {

                                }
                            });

其余代码保持不变。问题是我在ValueEventListener之后分配值。我不知道适当的原因,但紫苑在ValueEventLister内部分配值似乎代码运行良好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法从 Firebase 实时数据库中检索数据

来自分类Dev

无法将数据从 Firebase 实时数据库检索到 Web 应用程序中

来自分类Dev

从 Firebase 实时数据库中检索子数据

来自分类Dev

Firebase 数据库无法将数据检索到类中(返回 null)

来自分类Dev

从 Firebase(实时数据库)检索数据到列表中(Kotlin)

来自分类Dev

如何在Flutter中将Firebase实时数据库读取为“字符串”(没有Widget,streambuilder)?

来自分类Dev

Firebase:从实时数据库中检索childByAutoID

来自分类Dev

从 Firebase 实时数据库中检索好友

来自分类Dev

Firebase 实时数据库:无法从 Firebase 数据库发送或检索数据

来自分类Dev

无法将mysql数据检索到单个字符串中

来自分类Dev

到实时数据库asp.net C#的连接字符串

来自分类Dev

如何从Firebase实时数据库获取包含唯一密钥的字符串

来自分类Dev

Android - 将字符串转换为列表以推送到 Firebase 实时数据库

来自分类Dev

将字符串附加到 Firebase 实时数据库上的列表

来自分类Dev

数据更改后如何从Firebase实时数据库中检索特定数据

来自分类Dev

如果无法从Firebase实时数据库检索数据,则尝试在UITableView上显示消息

来自分类Dev

如何从 Firebase 实时数据库正确检索值?

来自分类Dev

为什么我不能将 Firebase 实时数据库中的数据显示到 UITableView 中?

来自分类Dev

使用选项从Firebase实时数据库中检索MCQ数据

来自分类Dev

Firebase:以Int形式从实时数据库中检索数据

来自分类Dev

无法从 Firebase 实时数据库获取数据

来自分类Dev

无法使用 FIrebase 实时数据库通过他的电子邮件检索好友密钥

来自分类Dev

Android Firebase - 从 Firebase 实时数据库中检索特定值

来自分类Dev

React + Firebase:如何添加项目以将数据列表到firebase实时数据库中

来自分类Dev

无法在我的 html 文件中初始化 firebase 并将任何数据保存到实时数据库

来自分类Dev

在Firestore中检索实时数据库值

来自分类Dev

列表视图从android中firebase的实时数据库中检索一项

来自分类Dev

如何从Firebase中的实时数据库获取数据

来自分类Dev

Firebase 实时数据库中的数据插入无限

Related 相关文章

  1. 1

    无法从 Firebase 实时数据库中检索数据

  2. 2

    无法将数据从 Firebase 实时数据库检索到 Web 应用程序中

  3. 3

    从 Firebase 实时数据库中检索子数据

  4. 4

    Firebase 数据库无法将数据检索到类中(返回 null)

  5. 5

    从 Firebase(实时数据库)检索数据到列表中(Kotlin)

  6. 6

    如何在Flutter中将Firebase实时数据库读取为“字符串”(没有Widget,streambuilder)?

  7. 7

    Firebase:从实时数据库中检索childByAutoID

  8. 8

    从 Firebase 实时数据库中检索好友

  9. 9

    Firebase 实时数据库:无法从 Firebase 数据库发送或检索数据

  10. 10

    无法将mysql数据检索到单个字符串中

  11. 11

    到实时数据库asp.net C#的连接字符串

  12. 12

    如何从Firebase实时数据库获取包含唯一密钥的字符串

  13. 13

    Android - 将字符串转换为列表以推送到 Firebase 实时数据库

  14. 14

    将字符串附加到 Firebase 实时数据库上的列表

  15. 15

    数据更改后如何从Firebase实时数据库中检索特定数据

  16. 16

    如果无法从Firebase实时数据库检索数据,则尝试在UITableView上显示消息

  17. 17

    如何从 Firebase 实时数据库正确检索值?

  18. 18

    为什么我不能将 Firebase 实时数据库中的数据显示到 UITableView 中?

  19. 19

    使用选项从Firebase实时数据库中检索MCQ数据

  20. 20

    Firebase:以Int形式从实时数据库中检索数据

  21. 21

    无法从 Firebase 实时数据库获取数据

  22. 22

    无法使用 FIrebase 实时数据库通过他的电子邮件检索好友密钥

  23. 23

    Android Firebase - 从 Firebase 实时数据库中检索特定值

  24. 24

    React + Firebase:如何添加项目以将数据列表到firebase实时数据库中

  25. 25

    无法在我的 html 文件中初始化 firebase 并将任何数据保存到实时数据库

  26. 26

    在Firestore中检索实时数据库值

  27. 27

    列表视图从android中firebase的实时数据库中检索一项

  28. 28

    如何从Firebase中的实时数据库获取数据

  29. 29

    Firebase 实时数据库中的数据插入无限

热门标签

归档