2016-10-24 2 views
1

Ich erstelle eine Chatanwendung, aber ich konnte nicht verstehen, wie man Benutzeravatara auf openfire Bediener unter Verwendung der smack API einstellt. Ich bin der folgende Code, um Benutzeravatar einzustellen.Wie man Benutzeravatar auf openfire Benutzer einstellt 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(); 
     } 
    } 
} 

Bitte Hilfe.

Antwort

0

Verwendung dieser Code: es könnte Ihnen nützlich sein :)

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

} 
+0

Thaks für Ihre Antwort. Ich habe das versucht, aber es funktioniert nicht in meinem Projekt. Ich habe kein Bild auf dem Server. Ich habe nur ein Bitmap-Objekt und wenn ich mein Bitmap-Objekt in Bytes umwandle, wird der Avatar nicht auf dem Openfire-Server gesetzt. Vielen Dank im Voraus –

+0

konvertieren Sie Bild nicht in Bitmap und dann bytes.just set Pfad des Bildes – dipali

Verwandte Themen