2015-06-05 31 views
5

Wdrażam aplikację do przesyłania wiadomości z protokołem XMPP i serwerem Openfire na platformie Android. Potrzebuję zapisać i załadować własną kartę Vcard i innych użytkowników vcard. W tej chwili udało mi się zachować vCard na serwerze i mogę go ponownie załadować. Problem jest z innymi użytkownikami Vcard, serwer zawsze zwraca XMPPError: feature-not-applied - cancel.Załaduj VCards z Smack (Android) w Openfire Server

używam tej biblioteki:

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' 

pokaż kod:

uratować moje własne pliku vCard (fine work).

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

Załaduj własne pliku vCard (fine work)

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

Problemem jest tutaj. Załaduj inny Vkartę użytkownik:

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

Nazwa użytkownika załadować vCard jest prawidłowe.

Wszelkie pomysły?

Z góry dziękuję.

+0

nadzieja Widzisz to, jest to starszy post, ale mam dokładnie ten sam problem. Ale jid, który próbuję wczytać, to [email protected], bez rozszerzenia Smack. Czy masz jakiś pomysł, dlaczego to nie działa? – Opiatefuchs

+0

mmm Rozwiązałem swój problem z jidem użytkownika bez/Smack. Jakiej wersji używasz w swojej aplikacji? –

+0

dzięki za odpowiedź ... Używam API Smack 4.1.6, ale wczoraj przeczytałem kilka raportów o błędach i wydaje mi się, że zależy to od serwera. Mój jid jest właściwy, więc to nie może być problem. Jeszcze jedno pytanie, Twoje połączenie, czy jesteś po prostu zalogowany przez Twój jid, czy też muszę dokonać pewnych zmian w Połączeniu przed wywołaniem vcard innego użytkownika? – Opiatefuchs

Odpowiedz

7

Problem, który możesz napotkać, to przyrostek JID. Metoda connection.getUser() zwraca identyfikator JID jako uż[email protected]/Smack. Aby uzyskać szczegóły wizytówki vCard, należy zapytać o to jako uż[email protected] (bez/Smack). Wypróbuj to i daj mi znać, czy to działa.

+0

Fantastyczne !!. W connection.getUser() otrzymam usuario @ jabber/Smack. Próbuję tylko z usuario @ jabber i działa dobrze. Dziękuję Ci!! –

+0

Awesome! Cieszę się, że to działało dla ciebie – y0da