2016-07-18 14 views
19

FirebaseRecyclerAdapterを使用してチャットメッセージを表示しています。FirebaseRecyclerAdapterにフィルターを適用します。

private void attachRecyclerViewAdapter() { 
    lastFifty = mChatRef.limitToLast(50).; 
    mRecyclerViewAdapter = new FirebaseRecyclerAdapter<Chat, ChatHolder>(
      Chat.class, R.layout.message, ChatHolder.class, lastFifty) { 

     @Override 
     public void populateViewHolder(ChatHolder chatView, Chat chat, int position) { 
      chatView.setName(chat.getName()); 
      chatView.setText(chat.getText()); 
      chatView.setTimeLocation(chat.getTime()); 
      FirebaseUser currentUser = mAuth.getCurrentUser(); 

      if (currentUser != null && chat.getUid().equals(currentUser.getUid())) { 
       chatView.setIsSender(true); 
      } else { 
       chatView.setIsSender(false); 
      } 
     } 
    }; 

私は特定のユーザーのリストを含むリストを持っています。フィルターを適用して、特定のユーザーからのメッセージのみを表示したいと考えています。私は何をすべきか ?

+0

(httpsを開いて[フィルタリングする機能を追加するためのFirebaseUI上の特徴要求]があります: //github.com/firebase/FirebaseUI-Android/issues/15)。 –

+1

サーバー側でフィルタリングを試して実行することが常にベストプラクティスです。ユーザーがまだ追加していない、またはブロックしていない他のユーザーにメッセージを送信するのを阻止しましたか?私が取り組んでいるアプリケーションでは、ユーザーは自分が望む任意のユーザーを追加することができますが、他のユーザーも追加した場合にのみメッセージを送信できます。 –

+1

-1 down投票 \t Firebaseデータベースでこれらの特定のユーザ専用のノードを使用したことはありますか? – Andrea

答えて

2

ユーザーIDのペアノードでメッセージを作成できます。例えばメッセージ - > 'UID1-UID2' - > ...

alphatecially次のmessageIdジェネレータコードとして一次のUIDである防ぐために行います。

public static String getMessageId(String id1, String id2){ 
     String messageId; 

     if(id1.compareTo(id2) < 0){ 
      messageId = id1 + "-" + id2; 
     }else if(id1.compareTo(id2) > 0) { 
      messageId = id2 + "-" + id1; 
     }else{ 
      messageId = id1; 
     } 

     return messageId; 
    } 

あなたがしたいですユーザとurselfとの間のチャット履歴を参照してユーザのIDを取得し、messageId = getMessageId(id1, id2); or messageId = getMessageId(id2, id1);は結果が結果に影響しないので同じ結果を返します。 >のmessageId

P.S. -

次にノードメッセージからメッセージを呼び出します私は説明しているようにメッセージノードを再構成する必要があります。あなたが文字を保存するために、MD5と同等にmessageIdに変換することができ

EDIT

ちょうどMD5がある

return md5(messageId); 

return messageId; 

を変更:

public static String md5(final String s) { 
    try { 
     // Create MD5 Hash 
     MessageDigest digest = java.security.MessageDigest 
       .getInstance("MD5"); 
     digest.update(s.getBytes()); 
     byte messageDigest[] = digest.digest(); 

     // Create Hex String 
     StringBuffer hexString = new StringBuffer(); 
     for (int i = 0; i < messageDigest.length; i++) { 
      String h = Integer.toHexString(0xFF & messageDigest[i]); 
      while (h.length() < 2) 
       h = "0" + h; 
      hexString.append(h); 
     } 
     return hexString.toString(); 

    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    return ""; 
} 
関連する問題