2016-07-18 25 views
19

'da bir filtre uygulama Sohbet mesajlarını görüntülemek için FirebaseRecyclerAdapter kullanıyorum.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); 
      } 
     } 
    }; 

Belirli kullanıcıların listesini içeren bir listeye sahibim. Sadece belirli kullanıcılardan gelen mesajları görmek için filtre uygulamak istiyorum. Ne yapmalıyım ?

+0

(https açık [filtreleme yeteneği eklemek için FirebaseUI üzerinde özellik isteği] yok: //github.com/firebase/FirebaseUI-Android/issues/15). –

+1

Sunucu tarafında filtrelemeyi denemek ve uygulamak her zaman en iyi uygulamadır. Kullanıcıları henüz eklemedikleri veya engellemedikleri diğer kullanıcılara mesaj göndermelerini durdurmak mı istiyorsunuz? Kullanıcıların istedikleri bir kullanıcıyı eklemelerine izin verdiğim bir uygulamada çalışıyorum ancak diğer kullanıcı da bunları eklediyse yalnızca mesaj göndermesine izin veriyorum. –

+1

-1 aşağı oy \t Firebase Veritabanında belirli kullanıcılar için ayrılmış bir düğüm kullanmayı düşündünüz mü? – Andrea

cevap

2

Kullanıcı kimliği eş düğümleriyle mesaj oluşturabilirsiniz. Örneğin mesajları -> 'uid1-uid2' -> ...

önlemek için aşağıdaki MessageID jeneratör kodu olarak alphatecially birinci derece kullanıcı kimlikleri olduğunu yapar:

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; 
    } 

sen istediğinizde Bir kullanıcı ile kendiniz arasındaki sohbet geçmişine bakın, kullanıcının kimliğini alın ve messageId = getMessageId(id1, id2); or messageId = getMessageId(id2, id1); değerini oluşturun, sonuç sonucu etkilemediğinden aynı sonucu verir.

Sonra düğümden mesajlar mesajlar çağrı -> MessageID

Not; İleti düğümü tanımladığım gibi yeniden yapılandırmalısınız.

DÜZENLEME

Sen karakter kurtarmak için md5 eşdeğeri MessageID dönüştürebilirsiniz.

sadece değiştirmek

return messageId; 

için md5 olan
return md5(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 ""; 
}