stream:error (text) 错误分析
2014-11-04 12:00
696 查看
错误描述:
xmpp 聊天,用asmack jar包,当用户中,日志一直显示 stream:error (text) 等错误信息
错误原因:
我使用的是
asmack-android-8-0.8.1.1.jar ,这个jar包对帐号异地登录处理方式跟我之前的jar不同,之前如果被别人挤下线,会报 stream:error (conflict) 错误,在代码中捕捉到这个错误就能做相应操作了,由于新换jar包的原因,导致正在使用的帐号被别人登录时挤下,然后报出stream:error (text) 这样的错误,而我的代码里没有做任何处理,加上自己的重连机制,就出现了不断重连再被挤下,以此循环。。。
解决方案:
知道了错误原因,就好办了,我根据错误提示找到了jar包中出错源码部分,在org.jivesoftware.smack.util.PacketParserUtils类中,部分代码:
就是这里的处理问题,导致帐号在别处登录时,被人挤下而报出stream:error (text) 的错误,我将其改成这样:
还有一种方式,就是在代码中把对stream:error (conflict)的错误处理,换成对stream:error (text)的错误处理,不过这样貌似有点问题,xmpp中,默认就是以conflict节点作为被别人挤下的标志,如果出现stream:error (conflict)的错误,一看便知是有别人在登录你的帐号,而text的话就不一定是了,我在之前就遇到过不是被别人挤下也报stream:error (text)错误的情况,现在记不清是啥情况下了,所有就先这样吧
xmpp 聊天,用asmack jar包,当用户中,日志一直显示 stream:error (text) 等错误信息
错误原因:
我使用的是
asmack-android-8-0.8.1.1.jar ,这个jar包对帐号异地登录处理方式跟我之前的jar不同,之前如果被别人挤下线,会报 stream:error (conflict) 错误,在代码中捕捉到这个错误就能做相应操作了,由于新换jar包的原因,导致正在使用的帐号被别人登录时挤下,然后报出stream:error (text) 这样的错误,而我的代码里没有做任何处理,加上自己的重连机制,就出现了不断重连再被挤下,以此循环。。。
解决方案:
知道了错误原因,就好办了,我根据错误提示找到了jar包中出错源码部分,在org.jivesoftware.smack.util.PacketParserUtils类中,部分代码:
<span style="font-size:24px;"> public static StreamError parseStreamError(XmlPullParser parser) throws IOException,XmlPullParserException { StreamError streamError = null; boolean done = false; while (!done) { int eventType = parser.next(); <span style="white-space:pre"> </span>if (eventType == XmlPullParser.START_TAG) { streamError = new StreamError(parser.getName()); } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals("error")) { done = true; } } } return streamError; }</span>
就是这里的处理问题,导致帐号在别处登录时,被人挤下而报出stream:error (text) 的错误,我将其改成这样:
<span style="font-size:24px;">public static StreamError parseStreamError(XmlPullParser parser) throws IOException,XmlPullParserException { StreamError streamError = null; boolean done = false; while (!done) { int eventType = parser.next(); boolean isConflict = !(streamError != null && "conflict".equals(streamError.getCode())); if ((eventType == XmlPullParser.START_TAG) && isConflict) { streamError = new StreamError(parser.getName()); } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals("error")) { done = true; } } } return streamError; }</span>其中加了句conflict字符串的判断,这样被别人挤下时,就会报出 stream:error (conflict)的错误了,这样我代码中就会捕捉到这个错误,并进行处理了,哦也。。。。
还有一种方式,就是在代码中把对stream:error (conflict)的错误处理,换成对stream:error (text)的错误处理,不过这样貌似有点问题,xmpp中,默认就是以conflict节点作为被别人挤下的标志,如果出现stream:error (conflict)的错误,一看便知是有别人在登录你的帐号,而text的话就不一定是了,我在之前就遇到过不是被别人挤下也报stream:error (text)错误的情况,现在记不清是啥情况下了,所有就先这样吧
相关文章推荐
- WinAPI: waveOutGetErrorText - 根据错误号得到错误描述
- WinAPI: midiOutGetErrorText - 根据错误号得到错误描述
- 错误:Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消息
- 【Python】python "TypeError: 'NoneType' object is not iterable"错误分析
- Android错误-error:Foundtext""whereitemtagisexpected
- 错误分析:Internal Query Processor Error: The query processor ran out of stack space during query optimization.
- sublime text+mingw编译时提示错误 error: stray '\357' in program(已解决)
- ERROR_INTERNET_CONNECTION_RESET错误分析一例
- javax.xml.parsers.FactoryConfigurationError错误分析
- ArcGIS Server + SilverLight + NetWorkAnalyst 网络分析错误:routing error:error solving route,unable to find
- [总结]Server Application Error(IIS5 HTTP500)内部错误分析及解决办法
- Connection reset by peer: socket write error错误分析及解决
- java.lang.VerifyError错误分析
- Error: no data exchange control with ID xx 错误分析
- ArcGIS Server + SilverLight + NetWorkAnalyst 网络分析错误:routing error:error solving route,unable to find attribute invalid!
- WinAPI: midiInGetErrorText - 根据错误号得到错误描述
- Connection reset by peer: socket write error错误分析及解决
- javax.xml.parsers.FactoryConfigurationError错误分析
- Connection reset by peer: socket write error错误分析及解决
- 错误分析 error: invalid suffix "-ui" on integer constant