如何在 ASMACK 中解析 CustomIQ

2024-04-10

我正在我的应用程序中使用 ASMACK 库。我从我的服务器收到以下 IQ。

<iq id='bind_2' type='result'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid username='xx' fullname='yy'>[email protected] /cdn-cgi/l/email-protection/Resource</jid></bind></iq>

为了解析这个 IQ,我在设置时添加了 IQProviderXmpp连接通过使用配置提供者管理器类为

ProviderManager.getInstance().addIQProvider("bind",
                        "urn:ietf:params:xml:ns:xmpp-bind",
                        new CustomIQProvider());

And my 定制IQ提供商类是

public class CustomIQProvider implements IQProvider {
    public static final String NAME_SPACE = "urn:ietf:params:xml:ns:xmpp-bind";

    @Override
    public IQ parseIQ(XmlPullParser parser) throws Exception {

        Log.i("My_TAG", "inside LivBindIQ");
        CustomIQ bindIQ = new CustomIQ();
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            throw new IllegalStateException(
                    "Parser not in proper position, or bad XML.");
        }
        boolean done = false;

        while (!done) {
            int eventType = parser.next();
            if ((eventType == XmlPullParser.START_TAG)
                    && ("entry".equals(parser.getName()))) {
                eventType = parser.next();
                String name = parser.nextText();
                eventType = parser.next();
                String value = parser.nextText();
            }
            else if (eventType == XmlPullParser.END_TAG) {
                done = true;
            }
        }

        return bindIQ;

    }

}

And my CustomIQ类是,

public class CustomIQ extends IQ {

    @Override
    public String getChildElementXML() {
        // TODO Auto-generated method stub
        return null;
    }

    }

现在我很困惑,如何CustomIQProvider类被执行..我没有得到任何日志CustomIQProvider班级。我的步骤是否正确,否则我需要执行任何步骤来调用我的CustomIQProvider class


也许已经有一个提供者注册了这个命名空间? 也许您需要在 IQProvider 上对 XML 进行完整且正确的解析,并且您的 CustomIQ 还需要实现 xml 的正确输出。 您正在检查一个标签,但显然它不存在,因此该解析器将永远无法工作。 假设这是您要解析的标签

<jid username='xx' fullname='yy'>[email protected] /cdn-cgi/l/email-protection/Resource</jid>

我没有测试过,但这应该有效,你的 parseIQ 方法应该如下所示

public IQ parseIQ(XmlPullParser parser) throws Exception {
  CustomIQ bindIQ = new CustomIQ();
  while (!done) {
    int eventType = parser.next();
    if (eventType == XmlPullParser.START_TAG) {
        if (parser.getName().equals("jid")) {
            String username = parser.getAttributeValue("", "username");
            String fullname = parser.getAttributeValue("", "fullname");
            String jidValue = parser.nextText();

            bindIQ.setUsername(username);
            bindIQ.setFullname(fullname);
            bindIQ.setFullJid(jidValue);
        }
    }
    else if (eventType == XmlPullParser.END_TAG) {
        if (parser.getName().equals("jid")) {
            done = true;
        }
    }
  }
  return bindIQ;
}

还有你的 CustomIQ 类:

public class CustomIQ extends IQ {

  private String username;
  private String fullName;
  private String fullJid;

  public CustomIQ() {

  }

  public void setUsername(String username) {
      this.username = username;
  }

  public void setFullname(String fullName) {
      this.fullName = fullName;
  }

  public void setFullJid(String fullJid) {
      this.fullJid = fullJid;
  }

  public String getUsername() {
      return this.username;
  }

  public String getFullname() {
      return this.fullName;
  }

  public String getFullJid() {
      return this.fullJid;
  }

  @Override
  public String getChildElementXML() {
      StringBuilder builder = new StringBuilder("<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"><jid username=\"");
      builder.append(username).append("\"");
      builder.append(" fullname=\"");
      builder.append(fullName).append("\"");
      builder.append(">");
      builder.append(fullJid);
      builder.append("</jid>");
      builder.append("</bind>");
      return builder.toString();
  }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ASMACK 中解析 CustomIQ 的相关文章

  • 没有这样的属性:类的 useLibrary

    我的项目在Android Studio上使用ndk 所以 build gradle如下 dependencies classpath com android tools build gradle experimental 0 4 0 app
  • 如何减少Android中CheckBox的宽度和高度

    谁能告诉我如何减少 CheckBox 的宽度和高度 以便在 Android 中显示非常小的 CheckBox 提前致谢 只需像使用普通按钮一样使用 setWidth w 和 setHeight h 函数即可
  • 进度条中形状的填充

    我正在使用 xml 文件来定义进度条 我在背景形状上定义了填充 但这个设置有时会正确显示 有时则不能 因此 如果我启动内部带有进度条的应用程序或活动 则会正确显示带有背景和 填充 进度的进度条 然后我关闭我的应用程序并再次启动它 并且 进度
  • 如何在android中将时间转换为“时间之前”

    我的服务器 返回时间 2016 01 24T16 00 00 000Z I want 1 转换为字符串 2 我希望它在从服务器加载时显示 不久前 请 帮我 我认为主要有三种方式 a 内置选项使用SimpleDateFormat and 日期
  • 无法从 https 下载 .apk

    我为我的客户开发了一个 Android 应用程序 我不想在 Play 商店上发布它 我已将其托管在我的客户端网站上 asp net 我已使用 MIME 类型 apk application vnd android package archi
  • 类 X 不是抽象的,并且没有实现 android.os.Parcelable 中定义的 fun writeToParcel()

    在我的 Android 应用程序中 我想添加一个 Bundle 其中包括Place下面描述我的意图的对象 由于 Serialized 速度慢且不推荐 所以我更喜欢 Parcelable 虽然我使用 Kotlin 1 3 31 但在分割某些数
  • 如何监听自定义 URI

    我正在开发一个有自己的 URI 前缀的应用程序 在本例中为 dchub 到处搜索并阅读了很多 但我有点困惑 当有人点击以以下开头的链接时 是否可以启动我的应用程序dchub 在浏览器中 到目前为止 找到了很多从应用程序打开浏览器的其他示例
  • getRunningAppProcesses 在 Android L (5.1.1) 上返回空列表 [重复]

    这个问题在这里已经有答案了 我刚刚测试了我的应用程序和 CM ATM Android Assistant 等 它们都无法获取正在运行的进程列表 但它们在预操作系统版本上运行良好 那么 Android L 5 1 1 发生了什么 请帮忙 am
  • 找不到具有不同构建变量的包名称“....”的匹配客户端

    我想实现推送通知 我添加到项目级别 dependencies classpath com android tools build gradle 2 2 2 classpath com google gms google services 3
  • Unity 2018.3 android dex合并问题

    在您决定将这篇文章视为 重复 而不阅读它之前 请了解我已经查看了大量与此主题相关的帖子 但我找不到适合我的实例的解决方案 包括 StackOverflow 建议的所有解决方案 大多数帖子都是针对 Android Studio 而不是 Uni
  • 创建带有蒙版的 ImageView

    我关注了有关该主题的其他一些问题 以及 XferModes 上的 API 演示 并尝试创建一个根据 alpha 掩码屏蔽其内容的 ImageView Alpha 位图包含 0 alpha 表示要隐藏的区域 255 alpha 表示要显示的区
  • 呼叫转移

    我想将所有拨打我号码的呼叫转接至新的预定义号码 自动地 可以转接来电吗 也许至少对于 Froyo 来说是可能的 我找到了名为 Easy Call Forwarding 的应用程序 http www appstorehq com easyca
  • 无法在android中使用retrofit发出@Post请求

    我正在学习如何在 android 中使用改造 但是每当我尝试从互联网检索数据时 我的应用程序不会返回任何内容我的响应没有成功 我不知道如何修复当前我正在尝试发布的错误并使用此 URL 检索数据https jsonplaceholder ty
  • 回购:找不到命令?

    我是 git 和 repo 的新手 我使用的是window 7 所以我使用cygwin 我已经从 cygwin 安装程序安装了 git 之后我尝试在 cygwin 中使用以下命令进行存储 repo init u git android gi
  • API级别29 Intent.ACTION_GET_CONTENT从下载文件夹返回错误的ID

    我正在尝试查找从文件选择器意图返回的 URI 的完整文件路径 我从互联网下载了一张图像 该图像保存在浏览器默认下载文件夹中 问题是 DocumentsContract getDocumentId content describer 返回的
  • 如何以编程方式查找Android手机的电池充电时间?

    我想知道我们如何找到 Android 设备将电池充满电需要多长时间 例如 如果我的电池电量为 0 则充满电 即 100 需要多长时间 如果我的设备电量为 70 则相同 因此如果我现在连接充电器 则需要多长时间才能充满我的设备 这对我有用 p
  • Android:如何实现“分布式控制”

    对于与 Android 开发者论坛的交叉发帖表示歉意 那里没有收到任何答复 我有一个有趣的设计挑战 我有一个前端 Activity 和一个后端 用本机 C C 编写 代码 后端是一个复杂的对象 它部分控制 应用程序流程一旦启动就在它自己的线
  • 有没有办法检测apk是否存储在SD卡上?

    有没有办法检测apk是否存储在SD卡上 如何 使用 getApplicationInfo sourceDir http developer android com reference android content pm Applicati
  • 与桌面浏览器相比,移动浏览器有多强大? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • E/libEGL: validate_display:99 错误 3008 (EGL_BAD_DISPLAY) API 24 或更高版本

    当我使用 API 为 24 或更高版本的设备时 我收到此错误 E libEGL validate display 99 错误 3008 EGL BAD DISPLAY XML 代码 activity main xml

随机推荐