2017-12-02 8 views
0

テキストボックスに入力された単語をチャットウィンドウに送信する送信ボタンがあります。送信ボタンをクリックすると、textbxに入力された単語をfirebaseサーバーに送信します。しかし、私がそうするとき、私のテキストボックスは数秒間フリーズして遅れます。私はfirebaseが既に非同期であることを理解し、asyctaskでfirebase呼び出しをラップしようとしましたが、運はありません。以下のcode.fyiのスニペットを参照してください、firebase呼び出しの後にuiの更新はありません。詳細については、ヘルプしてください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; 
     } 
} 

答えて

0

に原因を凍結離れテキストボックスと画面​​から取得するdidntの助けがFirebase要求ではないことをここに私の非同期タスクコードの下に参照してください。 Firebaseはそのリクエストをバックグラウンドスレッドで自動的に実行するため、AsyncTaskは必要ありません。別の原因を探す必要があります。

関連する問題