我正在为我的聊天应用程序使用asmack库.我使用下面描述的代码来获取messagecount:
ServiceDiscoveryManager manager = ServiceDiscoveryManager.getInstanceFor(connection);
DiscoverInfo info = manager.discoverInfo(null,"http://jabber.org/protocol/offline");
Form extendedInfo = Form.getFormFrom(info);
if (extendedInfo != null) {
String value = extendedInfo.getField("number_of_messages").getValues().next();
Log.e(TAG, "offline message"+value);
}
Run Code Online (Sandbox Code Playgroud)
但我得到了例外,如下所述:
09-14 16:11:32.892: ERROR/AndroidRuntime(498): at com.datingapps.breaktheice.SigninScreen.coonectToChat(SigninScreen.java:393)
09-14 16:35:20.611: WARN/System.err(538): java.lang.ClassCastException: org.jivesoftware.smack.util.PacketParserUtils$2
09-14 16:35:20.811: WARN/System.err(538): at org.jivesoftware.smackx.ServiceDiscoveryManager.discoverInfo(ServiceDiscoveryManager.java:608)
09-14 16:35:20.811: WARN/System.err(538): at com.datingapps.breaktheice.Chat$connectionTask.doInBackground(Chat.java:286)
09-14 16:35:20.811: WARN/System.err(538): at com.datingapps.breaktheice.Chat$connectionTask.doInBackground(Chat.java:1)
09-14 16:35:20.811: WARN/System.err(538): at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-14 16:35:20.811: WARN/System.err(538): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-14 16:35:20.821: WARN/System.err(538): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-14 16:35:20.821: WARN/System.err(538): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-14 16:35:20.821: WARN/System.err(538): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
09-14 16:35:20.821: WARN/System.err(538): at java.lang.Thread.run(Thread.java:1096)
Run Code Online (Sandbox Code Playgroud)
任何用asmack实现它或者用smack lib替代解决方案的人,请帮我解决这个问题.
谷歌搜索和搜索文档后,我得到了离线管理器来获取离线消息.
但是它不是在asmack中工作,也可能在smack中.它总是返回0消息.
最后通过查看日志我发现我登录时的每个领带我从聊天服务器得到了很多响应,其中还包含离线消息,但消息标签不是离线消息标签.所以我终于找到了
您可以通过在登录后直接设置数据包侦听器来从中获取脱机消息.如下所述,您必须在登录方法后实现数据包侦听器.
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
this.connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = StringUtils.parseBareAddress(message
.getFrom());
Log.i("XMPPClient", "Got text [" + message.getBody()
+ "] from [" + fromName + "]");
if (fromName.equalsIgnoreCase(matchUserJabberId
+ "server name")) {
// }
}
}
}
}, filter);
Run Code Online (Sandbox Code Playgroud)
希望它能帮助很多人找到离线消息的早期工作,因为我投入了更多的时间来解决它.
| 归档时间: |
|
| 查看次数: |
8374 次 |
| 最近记录: |