【发布时间】: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