Android调用webService(2)

       之前已经写Android调用webService的基本用法。但那里返回的是数组形式的数据,而webService一般传输的是XML形式的数据。因为之前一直没解析过XML格式的数据。在这一块卡了下,因为我拿到的数据是XML形式的文本数据。看网上很多解析XML都是说解析的XML文档文件。一直在纠结难道我还要输出成XML的文件,然后再去读?那多不合理呀!经过查找发现可以用dom4j。它有个方法是能解析XML形式的文本数据。

  首先可以同样需要一个jar包。

  dom4j-1.6.1.jar

  我用的是上面那个版本的jar包。当然需要其他版本的同学可以去官网下载(https://dom4j.github.io)。

  然后我这边稍稍的优化了下。还直接贴代码。因为有些地方是上一篇就写过的。这里我就不多加注释了。

    

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Handler;

public class Http {
public static final String NAME_SPACE = "填写你自己的";
public static final String TRANS_URL ="http://填写你自己的.asmx";
public static final int ENVOLOPE_VERSION = SoapEnvelope.VER12;
  
  //把你需要调的那个接口的方法名及需要上传的参数传过来
public static String post (String method, HashMap<String,String> hashMap){
String data = "";
SoapObject request = new SoapObject(NAME_SPACE,method);
     //可能需要传递的参数不止一个。就用set.然后遍历添加到SoapObject里面
Set<Map.Entry<String,String>> entrySet = hashMap.entrySet();
for (Map.Entry<String,String> entry:entrySet){
request.addProperty(entry.getKey(),entry.getValue());
}
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(ENVOLOPE_VERSION);
envelope.setOutputSoapObject(request);
envelope.dotNet =true;
HttpTransportSE se = new HttpTransportSE(TRANS_URL);
try {
se.call(null,envelope);
SoapObject response = (SoapObject) envelope.bodyIn;
SoapObject o = (SoapObject) response.getProperty(0);
for (int i=0;i<o.getPropertyCount();i++){
data = o.getPropertyAsString(i);
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return data;
}

}

这是通过webService 从服务器拿数据。跟上一篇内容基本都差不多。我这只不过优化了下。单独写在一个类里面了。拿到的数据是XML文本的字符串。


下面是解析的代码:
public void jiexi(String xml){
try {
    //dom4j中解析XML形式文本的方法
Document document = DocumentHelper.parseText(xml);
    //RoomType 是对应的对象
List<RoomType> list =new ArrayList<RoomType>();
    //elements("RoomType")中的RoomType是上图中的标签。
List<Element> elements = document.getRootElement().elements("RoomType");
     //循环遍历实例化对象添加到集合中方便调用。 
for (Element elem:elements){
RoomType roomType = new RoomType();
roomType.setRoomTypeCode(elem.elementText("RoomTypeCode"));
roomType.setRoomTypeName(elem.elementText("RoomTypeName"));
roomType.setRooms(elem.elementText("Rooms"));
roomType.setCategory(elem.elementText("Category"));
roomType.setRemarks(elem.elementText("Remarks"));
roomType.setAction(elem.elementText("Action"));
Log.e("zh",roomType.getRoomTypeName()+"-----------");
list.add(roomType);
}
//将list集合中的元素打印。
for(RoomType conn:list){
System.out.println(conn.getRoomTypeName());
}
} catch (DocumentException e) {
e.printStackTrace();
}
}

  

  

转载于:https://www.cnblogs.com/zhuhao0812/p/8126332.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值