【问题标题】:UI lag due to firebase database call由于 firebase 数据库调用导致 UI 滞后
【发布时间】:2017-12-02 06:16:50
【问题描述】:

我有一个发送按钮,可以将在文本框中输入的单词发送到聊天窗口。单击发送按钮时,我想将在 textbx 中键入的单词发送到 firebase 服务器。但是当我这样做时,我的文本框会冻结并滞后几秒钟。我知道firebase已经是异步的,我也尝试将firebase调用包装在asyctask中,但没有运气。请参阅下面的 code.fyi 的 sn-ps,firebase 调用后没有 ui 更新。请帮忙

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

                avaliblemeg = message.getText().toString();
                // ChatMessage name=  new ChatMessage(avaliblemeg,"0");


                ChatMessage film = new ChatMessage();
                // Here we set the film name and star name attribute for a film in one loop
                film.setMessageText(avaliblemeg);
                film.setMsgDirection("0");

                // Pass the Film object to the array of Film objects
                messageview.add(film);
                message_adapter.notifyDataSetChanged();
                message.setText("");
                long time = new Date().getTime();
                mDatabase.child("users").child(login_udid).child("Conversation_person").child(uid).setValue(new ChatModel(username,profile, uid, email,"No",avaliblemeg,"0",time));
                mDatabase.child("users").child(uid).child("Conversation_person").child(login_udid).setValue(new ChatModel(loginperson_name,login_profile,login_udid,login_email,"yes",avaliblemeg,"1",time));
                mDatabase.child("users").child(login_udid).child("Chat").child(uid).child("ChatList").push().setValue(new ChatMessage(avaliblemeg,"0"));
                mDatabase.child("users").child(uid).child("Chat").child(login_udid).child("ChatList").push().setValue(new ChatMessage(avaliblemeg,"1"));

               //new SendMessageTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
            }
        });

//有关信息,请参阅下面我的异步任务代码,这也无助于摆脱文本框和屏幕冻结

 private class SendMessageTask extends AsyncTask<Void, Integer, Void> {
        long time= new Date().getTime();

        @Override
        protected Void doInBackground(Void... params) {

        DatabaseReference d1= FirebaseDatabase.getInstance().getReference();
            d1.child("users").child(login_udid).child("Conversation_person").child(uid).setValue(new ChatModel(username,profile, uid, email,"No",avaliblemeg,"0",time));
            d1.child("users").child(uid).child("Conversation_person").child(login_udid).setValue(new ChatModel(loginperson_name,login_profile,login_udid,login_email,"yes",avaliblemeg,"1",time));
            d1.child("users").child(login_udid).child("Chat").child(uid).child("ChatList").push().setValue(new ChatMessage(avaliblemeg,"0"));
            d1.child("users").child(uid).child("Chat").child(login_udid).child("ChatList").push().setValue(new ChatMessage(avaliblemeg,"1"));

            return null;
        }
}

【问题讨论】:

  • @zui 你解决过这个问题吗?

标签: java android firebase android-asynctask


【解决方案1】:

原因不是 Firebase 请求,您甚至不需要 AsyncTask,因为 Firebase 会自动在后台线程中运行它的请求。你必须寻找另一个原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2022-08-05
    • 2017-10-08
    相关资源
    最近更新 更多