【发布时间】:2014-12-20 07:54:44
【问题描述】:
我正在尝试从 android 在 asmack 中使用 IQ 发送自定义信息。
所以我使用下面的代码来发送自定义 IQ 消息。
public void onClick(View arg0) {
CustomIQ req = new CustomIQ();
req.myData="Hello world";
req.setType(IQ.Type.GET);
req.setTo(Activity_title+Constants.DOMAIN);
MainActivity.connection.sendPacket(req);
Log.d(Constants.TAG, "xml value :"+req.toXML());
Log.d(Constants.TAG, "child element value :"+req.getChildElementXML());
Log.d(Constants.TAG, " custom IQ req sent");
下面是我自定义的 IQ 类实现:
import org.jivesoftware.smack.packet.IQ;
public class CustomIQ extends IQ {
String myData;
@Override
public String getChildElementXML() {
String request = "<query xmlns='myxmlns'>"
+ "<myData>"+ myData + "</myData>"
+ "</query>";
return request;
}
}
}
但是在发送自定义 IQ 之后,我在 IQ 侦听器中作为服务不可用和错误代码作为 503 进入。
以下是对服务器的请求:
xml value :<iq id="BTn30-5" to="swathi@btp121374" type="get"><query xmlns='myxmlns'><myData>Hello world</myData></query></iq>
child element value :<query xmlns='myxmlns'><myData>Hello world</myData></query>
以下是来自服务器的响应:
xml value :<iq id="BTn30-5" to="ganesh@btp121374/Smack" from="swathi@btp121374" type="error"><query xmlns='myxmlns'><myData>Hello world</myData></query><error code="503" type="CANCEL"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
那么,我从服务器收到响应为“服务不可用”的原因是什么。
编辑:
我如下实现了 IQProvider
public class customIQProvider implements IQProvider{
@Override
public IQ parseIQ(XmlPullParser parser) throws Exception {
Log.d(Constants.TAG, "In custom IQ provider");
CustomIQ myIQ_ref = new CustomIQ();
int eventType = parser.next();
while(eventType == XmlPullParser.START_TAG){
switch(parser.getEventType()){
case XmlPullParser.START_TAG:
{
if(parser.getName().equals("myData")){
myIQ_ref.myData=(parser.nextText());
}
}
return myIQ_ref;
}
}
return null;
}
}
【问题讨论】:
-
IQ 的(预期)接收者是谁?
标签: android xmpp openfire smack asmack