首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMPPFramework -如何更新我自己的头像图像?

XMPPFramework -如何更新我自己的头像图像?
EN

Stack Overflow用户
提问于 2012-11-05 14:29:07
回答 3查看 4.4K关注 0票数 4

我正在开发一个应用程序,我想更新我的头像图像。我正在遵循XEP-0153的指导方针来更新我的头像图像,我在XEP-0153中构造了一个对应于以下代码的NSXMLElement,并通过XMPPStream发送了该元素。

代码语言:javascript
复制
<iq from='juliet@capulet.com' 
    type='set'
    id='vc1'>
  <vCard xmlns='vcard-temp'>
    <PHOTO>
      <TYPE>image/jpeg</TYPE>
      <BINVAL>
        Base64-encoded-avatar-file-here!
      </BINVAL>
    </PHOTO>
  </vCard>
</iq>

服务器响应以下错误:

代码语言:javascript
复制
<iq xmlns="jabber:client" type="error" id="vc1" to="vvreddy50@gmail.com/83557F96">
<vCard xmlns="vcard-temp">
      <photo>
        <type>image/jpeg</type>
        <binval>Base64-encoded-avatar-file-here</binval>
      </photo>
</vCard>
<error code="500" type="wait">
      <internal-server-error xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
      </internal-server-error>
</error>
</iq>

代替<iq to='juliet@capulet.com' type='result' id='vc1'/>

请任何人可以张贴代码或链接,以更新化身图像?提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-01-18 17:46:15

代码语言:javascript
复制
- (void)updateAvatar:(UIImage *)avatar 
{
    NSData *imageData = UIImagePNGRepresentation(avatar);
    dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_PRIORITY_DEFAULT);
    dispatch_async(queue, ^{
        XMPPvCardTempModule *vCardTempModule = [[XMPPHandler sharedInstance] xmppvCardTempModule];
        XMPPvCardTemp *myVcardTemp = [vCardTempModule myvCardTemp];
        [myVcardTemp setName:[NSString stringWithFormat:@"%@",name.text]];
        [myVcardTemp setPhoto:imageData];
        [vCardTempModule updateMyvCardTemp:myVcardTemp];
    });
}
票数 10
EN

Stack Overflow用户

发布于 2014-10-30 17:46:44

#import "XMPPvCardTemp.h“

代码语言:javascript
复制
   - (void)updateAvatar:(UIImage *)avatar{  
  NSData *imageData1 = UIImageJPEGRepresentation(avatar,0.5);
        NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" xmlns:@"vcard-temp"];
        NSXMLElement *photoXML = [NSXMLElement elementWithName:@"PHOTO"];
        NSXMLElement *typeXML = [NSXMLElement elementWithName:@"TYPE"stringValue:@"image/jpeg"];
        NSXMLElement *binvalXML = [NSXMLElement elementWithName:@"BINVAL" stringValue:[imageData1 base64Encoding]];

        [photoXML addChild:typeXML];
        [photoXML addChild:binvalXML];
        [vCardXML addChild:photoXML];
        XMPPvCardTemp *myvCardTemp = [[[self appDelegate] xmppvCardTempModule]myvCardTemp];
        if (myvCardTemp) {
            [myvCardTemp setPhoto:imageData1];
            [[[self appDelegate] xmppvCardTempModule] updateMyvCardTemp
             :myvCardTemp];

        }
        else{

            XMPPvCardTemp *newvCardTemp = [XMPPvCardTemp vCardTempFromElement:vCardXML];
            [[[self appDelegate] xmppvCardTempModule] updateMyvCardTemp:newvCardTemp];
        }
     }
票数 3
EN

Stack Overflow用户

发布于 2013-02-15 01:38:15

XMPP Core RFC中,<error type='wait'>意味着:

等待后重试

(错误是暂时的)

因此,您的代码应该等待一段时间,然后重新发送请求。

(这是假设您实际发送的是base64编码的JPEG图像作为vCard的BINVAL。来自服务器的回复与您所说的发送的请求不一致,所以我假设您已经编辑了这两个请求。最好在问题中包含确切的请求和答复,但为了简洁起见,请将base64编码的图像截断为几个字符。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13227017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档