Как установить аватар пользователя на openfire user smack api

Я создаю приложение чата, но я не мог понять, как установить аватар пользователя на сервере 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();
        }
    }
}

Пожалуйста помоги.


person tarun bhutani    schedule 24.10.2016    source источник


Ответы (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);

}
person dipali    schedule 24.10.2016
comment
Спасибо за ваш ответ. Я пробовал это, но это не работает в моем проекте. У меня нет изображения на сервере. У меня есть только растровый объект, и когда я конвертирую свой растровый объект в байты, аватар не устанавливается на сервере openfire. заранее спасибо - person tarun bhutani; 26.10.2016
comment
не конвертируйте изображение в растровое изображение, а затем байты. Просто установите путь к изображению - person dipali; 26.10.2016