我在我的 Android 应用程序中使用 KSOAP2 库来调用 SOAP 服务。该代码在 2.2 版的模拟器中运行良好。但是当我尝试在我的手机(HTC Wildfire)中运行该应用程序(也是 2.2)时,我得到了 XMLPullParser 异常......看到这个链接,但没有人回复那个。另外,在这里看到了另一个讨论,但没有确切地了解那里的建议。有人可以告诉我如何解决这个问题吗?或者有没有其他可靠的方法来使用我可以使用的 SOAP 服务?请在我的代码和日志下面找到。
SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
envelope.setOutputSoapObject(request);
envelope.implicitTypes = false;
HttpTransportSE transport=new HttpTransportSE(URL);
try{
Log.v("Inside","Inside try");
transport.debug = true;
transport.call(SOAP_ACTION, envelope);
String xml=transport.responseDump;
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput( new StringReader ( xml ) );
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_DOCUMENT) {
System.out.println("Start document");
} else if(eventType == XmlPullParser.START_TAG) {
if(xpp.getName().equals("MMDraw")){
System.out.println("Start tag "+xpp.getName());
megaMResult=new HashMap<String, String>();
boolean endParse=false;
while(!endParse){
xpp.nextTag();
if(xpp.getEventType()==XmlPullParser.END_TAG && xpp.getName().equals("MMDraw") )
{
endParse=true;
System.out.println("End Tag of MMDraw Reached");
}
else{
String key=xpp.getName();
megaMResult.put(xpp.getName(), xpp.nextText());
}
}
在真实设备上运行时来自日志的消息
05-11 00:00:19.413: W/System.err(8531): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@44830068)