2013-09-04 20 views
7

Voglio bloccare un particolare amico dalla mia lista chat con XMPP. il codice funziona bene. Non ci sono eccezioni, ma non sono in grado di bloccare un utente. Sto usando il server open fire. quali modifiche devo apportare sul server?Problema nel bloccare l'utente nella lista chat utilizzando il server smack e open fire

Ragazzi, avete qualche idea?

Il mio codice:

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 sto ottenendo PrivacyListManager.getInstanceFor (connessione) come null. Per favore aiutami, non sono in grado di capire perché sta diventando nullo. –

+0

Ciao, funziona bene in java, ma sto ricevendo un'eccezione in asmack. So dove si trova il problema, puoi darmi il providermanager per il codice di elenco della privacy per me. –

risposta

0

Credo che il problema dovrebbe essere uno dei seguenti:

  • nome utente non è corretto, ad esempio "[email protected]".
  • Non si sta ascoltando per le modifiche alla privacy. Significa che non è stata implementata l'interfaccia di PrivacyListListener.
  • Nel costruttore PrivacyItem non dovresti usare PrivacyRule.JID invece PrivacyItem.Type.jid.toString() ?.
  • Se vuoi bloccare un amico, non dovresti usare updatePrivacyList invece di crearePrivacyList.

Mi raccomando di dare un'occhiata più da vicino alla documentazione Smack documentation

+0

Ciao astinx, si prega di inviare un codice praticabile per il blocco dell'utente. Sto affrontando un problema con il blocco dell'utente. Ricevo PrivacyListManager .getInstanceFor (connessione) restituendo null.Please help me –

+0

Siamo spiacenti, abbiamo già sepolto molto tempo fa la tecnologia XMPP. Ora stiamo usando un nodo è un approccio molto migliore, molto più veloce e affidabile, abbiamo avuto una chat con quasi 2000 utenti, XMMP non poteva gestire questo requisito. – 4gus71n

3

provare questo ...

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


} 

e per sbloccare basta sostituire falso con il vero oggetto di 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

La privacy è un metodo che consente agli utenti di bloccare le comunicazioni da particolari altri utenti. In XMPP questo viene fatto gestendo i propri elenchi sulla privacy.

1 - Al fine di aggiungere un nuovo elenco nel server, il cliente può implementare qualcosa di simile:



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

2 - Per aggiungere un nuovo elenco nel server, il client può implementare qualcosa di simile :

// 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);