繁体   English   中英

在 firebase 中插入数据后,活动被破坏

[英]activity gets destroyed after inserting data in firebase

所以我正在创建一个允许先注册的聊天应用程序。 登录后,您会在 ListView 中看到注册用户列表。这是相关的 onclick 代码 -

    usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

            String currentUser = getIntent().getExtras().getString("currUser");
            String chatBuddy = adapter.getItem(position);
            Intent goChatActivity = new Intent(getApplicationContext(), ChatActivity.class);

            goChatActivity.putExtra("currentUser", currentUser);
            goChatActivity.putExtra("chatBuddy", chatBuddy);
            startActivity(goChatActivity);
        }
    });

如果您单击一个用户,它会转到 ChatActivity.java,其中当前用户名和您单击的名称列表视图项在 OnCreate() 中分别作为 currentuser 和 chatbuddy 接收。 然后我有并 sendMesg onclick 方法在 firebase 中插入数据,主要是聊天和时间戳-

    sendMesg.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


            final Calendar cal = Calendar.getInstance();

            Chat chat = new Chat(chatEditText.getText().toString(), cal.getTime().toString());
            databaseReference.child(currentUser+"/"+currentUser+"_"+ chatBuddy).push().setValue(chat);


        }

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

        }
    });

我们登录后从列表视图中为每个新的 ChatBuddy 正确插入数据,我们 select 但每次单击 sendMesg,ChatActivity 消失,我 go 回到用户列表,这是我们登录后看到的第一页。 这是演示聊天屏幕记录的链接

Firebase eventListeners(ListenerForSingleValueEvent 除外)在您退出活动后保持运行,直到您使用 removeListener() 将其删除。

如果您对其他活动中的消息使用任何侦听器,它们可能仍在运行。 当您添加一条消息时,他们会尝试更改相关活动的 ui 并且您的应用程序崩溃。

这就是我解决问题的方法。firebase 的注册查询是-

FirebaseDatabase.getInstance().getReference().child("users");

注册后,用户登录并从 userList 中选择一个 chatBuddy 与之聊天 -

聊天插入的 DatabaseReference 是 -

FirebaseDatabase.getInstance().getReference().child("users").child("chats");

聊天会这样显示—— 有问题的数据插入

这意味着聊天被保存为父节点用户的子节点。 因此,注册用户最后保存的 state 受到一些干扰,因为聊天数据在同一个父节点下。

我必须为 DatabaseReference 进行聊天插入的唯一更改是 -

FirebaseDatabase.getInstance().getReference().child("chats");

也就是说,我从数据库引用中删除了.child("users"),因此聊天已成为所有其他 currentUser_chatBuddy 对的新节点或父节点。 因此不会干扰“用户”父节点上次保存的 state。 因此不再崩溃。 问题解决了。 无问题的数据插入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM