Я сделал именно то, что предложил ответ (Asmack not loading VCard), но он все еще не работает. Выход DEBUG показывает, что Smack принимает пакет с информацией VCard, но затем генерирует ClassCastException в https://github.com/rtreffer/smack/blob/master/source/org/jivesoftware/smackx/packet/VCard.java#L548, и все, что я получаю, это «Нет VCard для xxx @ xxx».asmack - не могу прочитать VCard
Мой код:
public VCard getUserVCard() throws XMPPException {
VCard userVCard = new VCard();
userVCard.load(connection);
return userVCard;
}
И некоторые предыдущие инициализации:
ConnectionConfiguration config = new ConnectionConfiguration(OF_HOST, OF_PORT, OF_SERVICE_NAME);
config.setDebuggerEnabled(true);
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
ProviderManager.getInstance().addIQProvider("vCard ", "vcard-temp", new org.jivesoftware.smackx.provider.VCardProvider());
connection = new XMPPConnection(config);
this.context = context;
try {
connection.connect();
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Информация VCard в базе данных в порядке - только окончательное литье не удается. Какие-либо предложения?
Один комментарий - если я использую VCardProvider напрямую, я могу создать VCard из строки: 'String vCardString = prefs .getString (UserPreferences.USER_VCARD, null); userVCard = VCardProvider.createVCardFromXML (vCardString); ' – PawelPredki
Вы пробовали использовать другой метод' userVCard.load (connection, user); ', пользователь, являющийся идентификатором пользователя, которого вы хотите получить vCard (т. Е. Ваш id в этом случае)? Я не знаю, будет ли это работать лучше, но это тот, который я использую с успехом. – Guillaume
Я тоже это пробовал, и результат был похож. Данные VCard извлекаются с сервера, но он не анализируется как объект VCard с помощью asmack. – PawelPredki