2015-06-05 14 views
5

Ich bin eine Messaging-Anwendung mit dem XMPP-Protokoll und Openfire-Server auf Android-Plattform implementieren. Ich muss speichern und laden meine eigene Vcard und andere Benutzer vcard. Im Moment habe ich es geschafft, meine vCard auf dem Server zu behalten und kann sie wieder laden. Das Problem ist mit den anderen Benutzern Vcards, Server immer zurück XMPPError: Feature-not-implementiert - Abbrechen.Load Vcards mit Smack (Android) in Openfire Server

Ich benutze diese Bibliotheken:

compile 'org.igniterealtime.smack:smack-android:4.1.2-SNAPSHOT' 
compile 'org.igniterealtime.smack:smack-tcp:4.1.2-SNAPSHOT' 
compile 'org.igniterealtime.smack:smack-extensions:4.1.2-SNAPSHOT' 

Zeigen Sie den Code:

meine eigene Vcard speichern (Work in Ordnung).

VCardManager vCardManager = VCardManager.getInstanceFor(connection); 
VCard vCard; 
vCard = vCardManager.loadVCard(); 
vCard.setNickName("User name"); 
URL urldefault = new URL("Avatar URL"); 
InputStream stream = urldefault.openStream(); 
byte[] avatar1 = readBytes(stream); 
vCard.setAvatar(avatar1, "avatar1/jpg"); 
vCard.setEmailHome("user email"); 
vCard.setPhoneHome("mobile", "888888888"); 
vCardManager.saveVCard(vCard); 

laden mein eigenes Vcard (Adaequat)

VCard vCard = null; 
VCardManager vCardManager = VCardManager.getInstanceFor(connection); 
vCard = vCardManager.loadVCard(); 

Das Problem hier ist. Anderen Benutzer laden Vcard:

VCardManager vCardManager = VCardManager.getInstanceFor(connection); 
boolean isSupported = vCardManager.isSupported(user); 
if (isSupported) // return true 
    vCard = vCardManager.loadVCard(user); 

Der Benutzername zum Laden von Vcard ist korrekt.

Irgendwelche Ideen?

Vielen Dank im Voraus.

+0

hoffe Du siehst das, es ist ein älteres Post, aber ich habe genau das gleiche Problem. Aber die jid, die ich laden möchte, ist [email protected], ohne die Smack-Erweiterung. Hast du irgendeine Idee, warum es nicht funktioniert? – Opiatefuchs

+0

mmm Ich löste mein Problem mit der jid des Benutzers ohne die/Smack. Welche Version verwenden Sie in Ihrer Anwendung? –

+0

danke für die Antwort ... Ich benutze Smack 4.1.6 API, aber gestern habe ich einige Fehlerberichte gelesen und scheint, dass es Server abhängig ist. Mein Jid ist korrekt, also könnte das nicht das Problem sein. Eine weitere Frage, Ihre Verbindung, sind Sie gerade mit Ihrer jid angemeldet oder muss ich einige Änderungen an Connection vornehmen, bevor ich die vcard eines anderen Benutzers anrufe? – Opiatefuchs

Antwort

7

Das Problem, mit dem Sie möglicherweise konfrontiert werden, ist das Suffix für die JID. Die connection.getUser() -Methode gibt die JID als [email protected]/Smack zurück. Um die vCard-Details abzurufen, müssen Sie sie als [email protected] (ohne/Smack) abfragen. Probieren Sie das aus und lassen Sie es mich wissen, wenn es funktioniert.

+0

Fantastisch !!. In connection.getUser() werde ich usuario @ jabber/Smack erhalten. Ich versuche es nur mit usuario @ jabber und es funktioniert gut. Vielen Dank!! –

+0

Super! Froh, dass es für dich funktioniert hat – y0da

Verwandte Themen