昨天我有一位用户给我发电子邮件,说我的应用程序有问题,所以我开始和他一起调试,让他给我发了电话记录,当他拨打电话时他正在收到XmlPullParserError
到服务器
E/Message Exchange::CallWebService(6426): Exception: org.xmlpull.v1.XmlPullParserException: unterminated entity ref (position:TEXT �������`I�...@1:18 in java.io.InputStreamReader@406c8808) 05-31 12:33:25.573
W/System.err(6426): org.xmlpull.v1.XmlPullParserException: unterminated entity ref (position:TEXT �������`I�...@1:18 in java.io.InputStreamReader@406c8808) 05-31-12:33:25.573
W/System.err(6426): at org.kxml2.io.KXmlParser.exception(KXmlParser.java:273)05-31 12:33:25.573
W/System.err(6426): at org.kxml2.io.KXmlParser.error(KXmlParser.java:269)05-31-12:33:25.573
W/System.err(6426): at org.kxml2.io.KXmlParser.pushEntity(KXmlParser.java:781)05-31 12:33:25.573
W/System.err(6426): at org.kxml2.io.KXmlParser.pushText(KXmlParser.java:849)05-31 12:33:25.573
W/System.err(6426): at org.kxml2.io.KXmlParser.nextImpl(KXmlParser.java:354)05-31 12:33:25.573
W/System.err(6426): at org.kxml2.io.KXmlParser.next(KXmlParser.java:1378)05-31 12:33:25.573
W/System.err(6426): at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:1408)05-31 12:33:25.573
W/System.err(6426): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)05-31 12:33:25.573
W/System.err(6426): at org.ksoap2.transport.Transport.parseResponse(Transport.java:100)05-31 12:33:25.573
W/System.err(6426): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195)05-31 12:33:25.573
W/System.err(6426): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)05-31 12:33:25.573
W/System.err(6426): at ecm2.android.MessageExchange$1.run(MessageExchange.java:96)05-31 12:33:25.573
W/System.err(6426): at java.lang.Thread.run(Thread.java:1019)05-31 12:33:27.928
这是
总是失败的那一行trans.call(SOAP_ACTION, soapEnvelope);
调用服务器,它只是抛出一个错误。我有same exact phone
这个人,我让他运行exact version I am running
,我在调用服务器时没有问题,但他仍然遇到问题。
我让他卸载并重新安装了好几次,所以我不知道是什么原因会导致他的手机而不是我的手机?
这就是我创建XML的方式
private static String CreateCallXML(String sDeviceID, String sEMailAddress, String sVersion) {
Logging logger = new Logging();
XmlSerializer serializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
try {
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag("", "PostData");
serializer.startTag("", "RetrieveMsg");
serializer.attribute("", "ver", sVersion);
serializer.attribute("", "DevID", sDeviceID);
serializer.attribute("", "eMailAddress", sEMailAddress);
logger.append("D", className, "CreateCallXML", "LastIncMsgID:" + Settings.LastIncMsgID);
logger.append("D", className, "CreateCallXML", "LastDLMsgID: " + Settings.LastDLMsgID);
serializer.attribute("", "LastIncMsgID", "" + Settings.LastIncMsgID);
serializer.attribute("", "LastDLMsgID", "" + Settings.LastDLMsgID);
serializer.endTag("", "RetrieveMsg");
serializer.endTag("", "PostData");
serializer.endDocument();
return writer.toString();
} catch (Exception e) {
return null;
}
}
更新2:
在完成代码后,似乎用户的电子邮件地址是问题,用户电子邮件地址的示例是abcd3961@gmail.com
如果我使用它会在它到达线路时调用异常服务器。如果我在电子邮件地址中更改一个字母,则执行调用。
这是一个ksoap问题吗?我怎么能绕过这个,因为我不能告诉他改变他的电子邮件地址?
答案 0 :(得分:15)
未终止的实体
时会发生此错误1 ...响应字符串中的错误可能是某些实体未关闭。
<root>
<a> first </a>
<b>second <----- </b> missing here
</roor>
2 ...您在xml文件中获得了一些xml字符
like & { } � ...
您需要将所有&amp; 替换为&amp; amp; see this answer
...
String str = writer.toString();
str = str.replaceAll("&","&");
str = str.replaceAll("?","?");
return str;
答案 1 :(得分:4)
我在Android 2.2设备上遇到同样的问题,发现ksoap2 2.6.5与Android 2.2不兼容。嗯,我认为这是问题,我所知道的是它抛出了这些错误。我把我的ksoap2降级到了2.4,它又开始工作了。
答案 2 :(得分:0)
我遇到了同样的问题。解决方案是当我从XML发送响应时我必须更换“&amp;”与&amp;在用户名中,有些用户遇到了问题但有些用户没有。
所以“MAC”答案中的第2步