2013-09-04 14 views
7

Chcę zablokować określonego znajomego z mojej listy czatu pod numerem XMPP. kod działa poprawnie. Nie ma wyjątków, ale nie mogę zablokować użytkownika. Używam serwera otwartego ognia. jakie zmiany powinienem wprowadzić na serwerze?Problem podczas blokowania użytkownika na liście dyskusyjnej za pomocą serwera Smack and Open Fire

Czy faceci mają jakiś pomysł?

Mój kod:

public void XMPPAddNewPrivacyList(Connection connection, String userName) { 

    String listName = "newList"; 

    // Create the list of PrivacyItem that will allow or 
    // deny some privacy aspect 

    List<PrivacyItem> privacyItems = new Vector<PrivacyItem>(); 

    PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid.toString(), 
      false, 1); 
    item.setValue(userName); 
    privacyItems.add(item); 

    // Create the new list. 

    try { 
     PrivacyListManager privacyManager = new PrivacyListManager(connection); 
     privacyManager = PrivacyListManager 
       .getInstanceFor(connection); 
     privacyManager.createPrivacyList(listName, privacyItems); 

    } catch (XMPPException e) { 
     System.out.println("PRIVACY_ERROR: " + e); 
    } 
} 
+0

hi jestem coraz PrivacyListManager.getInstanceFor (połączenia) jako null. Proszę, pomóżcie mi, nie jestem w stanie zrozumieć, dlaczego jest ona zerowa. –

+0

Witam, działa dobrze w java, ale otrzymuję wyjątek w asmack. Wiem, gdzie jest problem, czy możesz mi dać providener dla kodu listy prywatności dla mnie. –

Odpowiedz

0

myślę, że problem powinien być jedną z następujących czynności:

  • nazwa użytkownika nie jest poprawny, na przykład "[email protected]".
  • Nie słuchasz zmian prywatności, to znaczy, nie wdrożyłeś interfejsu PrivacyListListener.
  • W konstruktorze PrivacyItem nie powinieneś używać PrivacyRule.JID zamiast PrivacyItem.Type.jid.toString() ?.
  • Jeśli chcesz zablokować znajomego, nie powinieneś używać updatePrivacyList zamiast createPrivacyList.

Ja polecam Ci przyjrzeć się bliżej do dokumentacji Smack documentation

+0

Witam astinx, proszę napisać działający kod do blokowania użytkownika. Mam problem z blokowaniem użytkownika. Otrzymuję PrivacyListManager .getInstanceFor (połączenie) zwracając null.Please help –

+0

Przepraszamy, już dawno pochowany technologii XMPP. Używamy teraz węzła jest o wiele lepszym podejściem, znacznie szybszym i bardziej niezawodnym, rozmawialiśmy z prawie 2000 użytkownikami, XMMP nie mógł obsłużyć tego wymogu. – 4gus71n

3

spróbować tego ...

public boolean blockFriend(String friendName) { 

    PrivacyItem item=new PrivacyItem(PrivacyItem.Type.jid,friendName, false, 7); 
    PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(connection); 
    List<PrivacyItem> list=new ArrayList<PrivacyItem>(); 
    list.add(item); 

    try { 
     privacyManager.updatePrivacyList(NEWLIST, list); 
     privacyManager.setActiveListName(NEWLIST); 
     return true; 
    } catch (SmackException.NoResponseException |XMPPException.XMPPErrorException | SmackException.NotConnectedException e) { 
     e.printStackTrace(); 
     return false; 
    } 


} 

i odblokować prostu zastąpić fałsz z prawdą w przedmiocie privacyitem `

0
// Here function for block user on xmpp 

    public boolean blockUser(String userName) { 

    String jid = [email protected] 
    String listName = "public"; 

    // Create the list of PrivacyItem that will allow or 
    // deny some privacy aspect 

    //ArrayList privacyItems = new ArrayList(); 

    List<PrivacyItem> privacyItems = new Vector<PrivacyItem>(); 


    PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid, jid, false, 1); 
    // item.setValue(userName); 
    item.setFilterIQ(false); 
    item.setFilterMessage(false); 
    item.setFilterPresenceIn(false); 
    item.setFilterPresenceOut(false); 

    privacyItems.add(item); 

    // Get the privacy manager for the current connection. 

    // Create the new list. 
    PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(XMPPUtils.INSTANCE.connection); 


    try { 
     privacyManager.updatePrivacyList(listName, privacyItems); 
     privacyManager.setActiveListName(listName); 

     return true; 
    } catch (Exception e) { 
     Log.e("PRIVACY_ERROR: ", " " + e.toString()); 
     e.printStackTrace(); 
    } 

    return false; 
} 
0

Prywatność to metoda blokowania komunikacji między użytkownikami. W XMPP odbywa się to poprzez zarządzanie własnymi listami prywatności.

1 - Aby dodać nową listę na serwerze, klient może wprowadzić coś takiego:



    // Create a privacy manager for the current connection._ 
    PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection); 
    // Retrieve server privacy lists_ 
    PrivacyList[] lists = privacyManager.getPrivacyLists(); 

2 - Aby dodać nową listę na serwerze, klient może wprowadzić coś takiego :

// Set the name of the list_ 
String listName = "newList"; 

// Create the list of PrivacyItem that will allow or deny some privacy aspect_ 
String user = "[email protected]"; 
String groupName = "enemies"; 
ArrayList privacyItems = new ArrayList(); 

PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid, user, true, 1); 
privacyItems.add(item); 

item = new PrivacyItem(PrivacyItem.Type.subscription, PrivacyItem.SUBSCRIPTION_BOTH, true, 2); 
privacyItems.add(item); 

item = new PrivacyItem(PrivacyItem.Type.group, groupName, false, 3); 
item.setFilterMessage(true); 
privacyItems.add(item); 

// Get the privacy manager for the current connection._ 
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection); 
// Create the new list._ 
privacyManager.createPrivacyList(listName, privacyItems);