#android #xmpp #openfire #asmack #avatar
#Android #xmpp #openfire #asmack #аватар
Вопрос:
Я создаю приложение для чата, но я не мог понять, как установить аватар пользователя на сервере openfire с помощью smack api. я использую приведенный ниже код для установки аватара пользователя.
public boolean changeImage(File file) {
if (mConnection == null)
return false;
try {
VCard vcard = new VCard();
String userJID = prefs.getString(Prefrences.xmpp_jid, null);
System.out.println("user:- " userJID);
vcard.load(mConnection, userJID);
byte[] bytes;
bytes = getFileBytes(file);
String encodedImage = StringUtils.encodeHex(bytes);
vcard.setAvatar(bytes, encodedImage);
vcard.setEncodedImage(encodedImage);
vcard.setField("PHOTO", "<TYPE>image/jpg</TYPE><BINVAL>"
encodedImage "</BINVAL>", true);
System.out.println("Encoded image " encodedImage);
System.out.println(" ");
ByteArrayInputStream bais = new ByteArrayInputStream(
vcard.getAvatar());
FormatTools.getInstance().InputStream2Bitmap(bais);
vcard.save(mConnection);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* File to byte
*
* @param file
* @return
* @throws java.io.IOException
*/
private byte[] getFileBytes(File file) throws IOException {
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(new FileInputStream(file));
int bytes = (int) file.length();
byte[] buffer = new byte[bytes];
int readBytes = bis.read(buffer);
if (readBytes != buffer.length) {
throw new IOException("Entire file not read");
}
return buffer;
} finally {
if (bis != null) {
bis.close();
}
}
}
Пожалуйста, помогите.
Ответ №1:
используйте этот код: это может быть полезно для вас 🙂
private void loadVCard(XMPPConnection conn, String username) {
VCard vcard = new VCard();
//ProviderManager.addIQProvider("vCard", "vcard-temp", new VCardProvider());
vcard.load(conn, username);
vcard.setFirstName("" username);
vcard.setEmailHome("" email);
vcard.setMiddleName("" middleName);
vcard.setNickName("" nickName);
vcard.setPhoneHome("Voice", "" phoneNumber);
vcard.setLastName("" lastName);
vcard.setOrganization("" orginiZation);
vcard.setAvatar("" image_path); //Image Path should be URL or Can be Byte Array etc.
vcard.save(conn);
}
Комментарии:
1. Спасибо за ваш ответ. Я пробовал это, но это не работает в моем проекте. У меня нет изображения на сервере. У меня есть только растровый объект, и когда я конвертирую свой растровый объект в байты, аватар не устанавливается на сервере openfire. Заранее спасибо
2. не преобразуйте изображение в растровое изображение, а затем в байты. просто задайте путь к изображению