android - 如何在 android 上使用 smack 4.3.5 检索用户的真实姓名?
问题描述
在将他添加到我的名册之前,我需要检索用户的真实姓名,但我还没有找到任何方法来做到这一点。你们中的一些人可能会建议我在将他添加到我的名册之前获取用户的真实姓名。
roster.addSubscribeListener((from, subscribeRequest) -> {
//Here I need to get the real name of the user.
return SubscribeListener.SubscribeAnswer.ApproveAndAlsoRequestIfRequired;
});
解决方案
用于在 smack 中检索用户的真实姓名,以便您必须使用 Vcard ( https://xmpp.org/extensions/xep-0054.html ) 管理名称。vCard 是个人用户信息存储的现有且广泛使用的标准,有点像电子名片。
下面的代码使用 XMPP 连接保存 Vcard
fun updateVCard(firstName: String, lastName: String) {
val vCardManager: VCardManager = VCardManager.getInstanceFor(connection)
val vCard = VCard()
vCard.firstName = firstName
vCard.lastName = lastName
vCard.setField("FN", firstName)
try {
vCardManager.saveVCard(vCard)
Log.e("updateVCard", "updateVCard: update success")
} catch (e: Exception) {
e.printStackTrace()
Log.e("updateVCard", "updateVCard: error " + e.message)
}
}
现在此代码用于获取存储在服务器 Vcard 中的用户详细信息
val vCard = getUserDetail(jid); val 用户名 = vCard?.getField("FN") + " " + vCard?.lastName
fun getUserDetail(JID: String): VCard? {
var jid: EntityBareJid? = null
var vCard: VCard? = null
try {
jid = JidCreate.entityBareFrom(JID)
vCard = VCardManager.getInstanceFor(connection).loadVCard(jid) as VCard
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
return vCard
}
推荐阅读
- microsoft-graph-api - 如何使用为 MS Teams 创建新的聊天线程“提及”某人
- angular - 405(方法不允许)Ionic 3 RestAPI
- php - 有没有办法通过索引访问行列而不是命名它?
- java - Java 线程(初学者)
- php - PHP如何替换字符串的第二个字符,如果它是一个空格
- c++ - 模板模板函数未按预期推断参数
- mysql - 删除表中的一行mysql hiberhate
- sql - 在 SQL Google BigQuery 中计算 CASE
- c# - C# P/调用 | blittable 结构数组的编组行为不一致?
- java - 在 JAVA 和 Spring 中设计自定义工作流