1

firebase를 사용하여 만든 채팅 응용 프로그램이 있습니다. 그것은 잘 작동합니다. 그러나 일부 사용자는 그런 속어를 보냅니다. Firebase Recyclerview를 사용합니다. 내 연결은 데이터베이스에 직접 연결됩니다. 그래서 나는 데이터가 추가되기 전에 메시지가 좋은지 나쁜지를 확인할 수 없다.로컬 데이터를 Firebase 데이터베이스와 병합하여 recyclerview에 표시

내가 원하는 것은 그 데이터를 다른 위치로 보내고 싶습니다. 그런 다음 클라우드 기능을 사용하여 확인한 후 원래 채팅방 데이터베이스에 추가하고 싶습니다.

그 단계까지는 아무런 문제가 없습니다. 그러나 사용자가 메시지를 보낼 때. 사용자가 데이터가 업데이트 될 때까지 기다리지 않아도됩니다. 구름 기능은 나를 위해 2-3 초 걸립니다. 해당 데이터를 로컬로 보내는 상태로 추가하고 대화방 데이터베이스에서 업데이트되면 업데이트합니다.

그래서 그렇게하는 가장 좋은 방법은 무엇입니까 ..

내 코드와 아무 문제가 없습니다. 당신이 당신의 ChatData 클래스에 부울 변수를 추가하는 것입니다 해결하는 것이

Query query = FirebaseDatabase.getInstance() 
            .getReference() 
            .child("rooms").child("Off-Topic").child("chat") 
            .limitToLast(500); 
    firebaseOptions = new FirebaseRecyclerOptions.Builder<ChatData>() 
      .setQuery(query, ChatData.class) 
      .build(); 

    chatAdapter = new FirebaseRecyclerAdapter<ChatData, ChatHolder>(firebaseOptions) { 
     @Override 
     protected void onBindViewHolder(ChatHolder holder, int position, ChatData model) { 

     } 

     @Override 
     public ChatHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.sender_text_message, parent, false); 


        return new ChatHolder(v); 
      } 

    }; 

답변

0

가장 간단한 방법은 .. 단지 기본 중포 기지 어댑터입니다. 이 변수 (isGood)는 메시지를 보내면 false가되고 Cloud 기능에 의해 업데이트 될 때 true가됩니다.

그래서 어댑터의 onBindViewHolder은 다음과 같습니다

@Override 
     protected void onBindViewHolder(ChatHolder holder, int position, ChatData model) { 
      if(model.isGood()) 
      holder.textView.setText(model.getMessage()); //edit this line as needed 
      else 
      holder.textView.setText("sending..."); //replace textView with the name of your actual TextView 
     }