4

昨日、ユーザーから私のアプリケーションに問題があるというメールが届いたので、彼と一緒にデバッグを開始し、電話のログを送ってもらいました。彼が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、サーバーへの呼び出しを行うために回線に到達したときに例外をスローすることを使用した場合です。メールアドレスの1文字を変更すると、正常に通話が実行されます。

これはksoapの問題ですか?メールアドレスを変更するように指示できないので、どうすればこれを回避できますか?

4

3 に答える 3

16

終了していないエンティティこのエラーは次の場合に発生します

1 ...応答文字列のエラーは、一部のエンティティが閉じられていない可能性があります。

<root>
    <a> first </a>
    <b>second             <----- </b> missing here
</roor>

2...xmlファイルにいくつかのxml文字を取得しています

 like      & { } � ...

すべての&&amp; に置き換える必要があります。この答えを参照してください

...
String str = writer.toString();
str = str.replaceAll("&","&amp;");
str = str.replaceAll("?","&#63;");
return str;
于 2012-06-01T14:16:50.157 に答える
4

Android 2.2デバイスでも同じ問題が発生していましたが、ksoap22.6.5はAndroid2.2と互換性がないことがわかりました。それが問題だと思います。私が知っているのは、これらのエラーがスローされることだけです。ksoap2を2.4にダウングレードすると、再び機能し始めました。

于 2012-10-15T01:49:23.217 に答える
0

私も同じ問題を抱えていました。解決策は、XMLから応答を送信するときに、ユーザー名の「&」を&に置き換える必要があることでした。一部のユーザーには問題がありましたが、他のユーザーには問題がありませんでした。

したがって、「MAC」の回答のステップ2

于 2012-11-19T12:08:32.337 に答える