1.Webservice.GetVcardByUserNo(String userId,String userNo);这个是封装了的webservice接口。
2.在程序中连续两次调用该接口时,ksoap2在解析第二次调用返回的结果时抛异常。
异常信息如下:org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@4383bf38)
3.打断点调试时,不会出现该异常。

4.无奈之下使用android 的HttpURLConnection 直接调用webservice接口,直接使用时不会发生以上异常,所以使用ksoap2 访问webservice需要设置什么呢?

5.使用HttpUrlConnection访问webserivice代码如下:

(一)连接webservice

StringServerUrl="webservice地址";
String soapAction="http://www.v_card.net.cn/PhoneClient/GetVcardJson";

String data="";

String requestData="<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"+
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n"
+"<soap:Header>\r\n"+
"<AuthHeader xmlns=\"http://www.v_card.net.cn/PhoneClient/\">\r\n"+
"<UserId>"+userID+"</UserId>\r\n"+
"</AuthHeader>\r\n"+
"</soap:Header>\r\n"+
"<soap:Body>\r\n"+
"<GetVcardJson xmlns=\"http://www.v_card.net.cn/PhoneClient/\">\r\n"+
"<vcardUserNo>"+userNo+"</vcardUserNo>\r\n"+
"</GetVcardJson>\r\n"+
"</soap:Body>\r\n"+

"</soap:Envelope>";

try{
URL url =new URL(ServerUrl);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
byte[] bytes=requestData.getBytes("utf-8");
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
con.setRequestProperty("SOAPAction",soapAction);
con.setRequestProperty("Content-Length",""+bytes.length);
OutputStream outStream=con.getOutputStream();
outStream.write(bytes);
outStream.flush();
outStream.close();
InputStream inStream=con.getInputStream();

data=parser(inStream);

(二)解析返回的数据

private static String parser(InputStream in){
XmlPullParser parser=Xml.newPullParser();
String data="";
try{
int flag=0;
parser.setInput(in, "utf-8");
int evenType=parser.getEventType();
while(evenType!=XmlPullParser.END_DOCUMENT){
switch(evenType){
case XmlPullParser.START_DOCUMENT:break;
case XmlPullParser.START_TAG:
break;
case XmlPullParser.TEXT:
data=parser.getText();
break;
case XmlPullParser.END_TAG:break;
}
parser.next();
evenType=parser.getEventType();
}

}catch(XmlPullParserException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return data;
}



更多相关文章

  1. Android(安卓)Volley框架详解
  2. Android5.X之百分比布局库(percent-support-lib) 解析与扩展
  3. SQLite与ContentProvider)
  4. 【Android】隐式调用Activity时匹配category需要注意的细节
  5. Android实战技巧:常用开发FAQ(续)
  6. android Touch事件的处理流程
  7. 如何在Android中调用webservice
  8. Android(安卓)webview与js交互
  9. aapt dump badging 找不到'android:versionCode' Bug解决

随机推荐

  1. design principle:模拟 android Button 控
  2. Android多分辨率适配
  3. Android动画基础
  4. 解决Android的ListView控件滚动时背景变
  5. 分析Android(安卓)根文件系统启动过程(ini
  6. android 事件总线 -- Otto(一)
  7. android文档开发规范
  8. 初涉Android蓝牙开发
  9. Android远程服务三:android AIDL远程服务
  10. Android(安卓)UI设计技巧