2009-12-03 23 views
4

我正在使用Smack庫在Android上的XMPP客戶端上工作。名冊/消息/存在的東西運行得很好。但是,我沒有找到一種方法來存儲額外的配置文件信息(userpicture,狗的名字,...)。如何使用Smack設置/獲取配置文件數據與XMPP

我從Google上看到的唯一方法就是使用VCards。但它根本行不通。我嘗試了以下內容:

 VCard vCard = new VCard(); 
     vCard.load(connection); 
     vCard.setEmailHome("[email protected]"); 
     vCard.setLastName("Scheller"); 
     vCard.setField("blafasel", "asdf"); 
     vCard.save(connection); 

然後我正在尋找一種方法來查看該VCard信息。這既沒有在iChat也不在此的System.out顯示:

 vCard.load(connection, user); 
     System.out.println(user + " has this vCard: " + vCard.toXML()); 

所以出了差錯,但世界上沒有顯示那是什麼。我試着用谷歌談話服務器和我自己的openfire副本獲得相同的結果。順便說一句,我使用的這個版本啪的:http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/

我在做什麼錯在這裏?用Smack存儲配置文件相關信息的正確方法是什麼?

回答

12

我已簽出啪的來源,並通過與調試器的重要組成部分去了,以及使用啪調試窗口。問題出在Smack API的VCard實現中。保存一個VCard按照描述工作,但加載被破壞。

parseIQ(XmlPullParser解析器)是PacketReader.java類的一部分,並處理不同類型的封裝。它只能處理變量與下面的命名空間:

「胡言亂語:智商:AUTH」, 「胡言亂語:IQ:名冊」, 「胡言亂語:智商:註冊」, 「金塔:IETF:PARAMS:XML:NS :XMPP協議捆綁」

它也期待,如果有任何註冊IQProvider在ProviderManager的。這是我的問題的根源。 VCards沒有註冊IQProvider。因此,vCard標籤內的任何信息都會被丟棄。

這不是太難,雖然註冊此IQProvider:

ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider()); 

這解決了上述救了我自己的名片,並重新下載我的小例子。我仍然無法下載其他用戶的電子名片......要仔細研究一下這個問題,也許會爲這個問題開闢另一條線索。

+0

嗨@UlrichScheller我可以保存和加載自己的電子名片,但我不能加載其他用戶的電子名片。我正在獲取功能未實現的響應。有任何想法嗎?你有?謝謝 – 2015-06-05 15:41:20

2

嘗試先用另一個客戶端爲該用戶設置一個vCard,然後看看它是如何改變你的結果的。爲了進一步診斷,您需要打開Smack中的協議調試(在臺式機上使用「-Dsmack.debugEnabled=true」),並在此處發佈相關位。

+0

謝謝,調試模式definitly幫助我跟蹤這個問題。 – 2009-12-10 13:23:15

3

您可以使用下面的代碼來獲取信息。

VCard card = new VCard(); 
card.load(connection, "[email protected]"); 
System.out.println("Voice: "+card.getPhoneHome("VOICE")); 
相關問題