
webservice返回的xml解析方法:
一般来说,调用webService通常需要几个步骤,在调用之前,首先需要下载Soap的jar包。
1、参数设置:上面说到的几个参数都要先设置,这主要依赖于要调用的web'Service的网址:
// 命名空间
String nameSpace = ">
// 调用的方法名称
String methodName = "getDetailInfoByTrainCode";
// EndPoint
String endPoint = ">
// SOAP Action
String soapAction = ">
2、指定命名空间与调用方法名
// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(nameSpace, methodName);
3、设置参数:
// 设置需调用WebService接口需要传入的两个参数TrainCode、userId
rpcaddProperty("TrainCode", params[0]);
rpcaddProperty("UserID","");
4、生成调用WebService方法的SOAP请求信息
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelopeVER12);
envelopebodyOut = rpc;
5、调用WebService方法
try {
// 调用WebService
transportcall(soapAction, envelope);
} catch (Exception e) {
eprintStackTrace();
}
6、解析WebService中的DataSet数据
SoapObject soap1=(SoapObject)objectgetProperty("getDetailInfoByTrainCodeResult");
SoapObject childs=(SoapObject)soap1getProperty(1);
SoapObject soap2=(SoapObject)childsgetProperty(0);
///
for(int i=0;i<soap2getPropertyCount();i++){
SoapObject soap3=(SoapObject)soap2getProperty(i);
///
Info info=new Info();
infosetStation(soap3getProperty(0)toString());
infosetArriveTime(soap3getProperty(1)toString());
infosetStartTime(soap3getProperty(2)toString());
infosetKm(soap3getProperty(3)toString());
Raininfoadd(info);
//result=soap3getProperty(3)toString();
}
数据格式如下:
使用>
首先将省市信息以的形式保存到名为arraysxml的文件中(我记得貌似一定要把文件名取为arraysxml)。其中,name属性可以理解为数组名和ID名。这里要注意:省份的顺序要与对应拥有的城市顺序一致。即台湾为最后最后一个省,
在选择城市界面对应的Activity中,通过下面代码将省份列表显示。其中Rarrayprovinces就是我们上面定义的name属性值。
ArrayAdapter adapter =
ArrayAdaptercreateFromResource(this,Rarrayprovinces,androidRlayoutsimple_spinner_item);
provinceSpinnersetAdapter(adapter);
接着,对省份下拉列表进行监听。这里有一个比较麻烦的地方,因为当你选择不同的省份的时候,需要显示该省份对应的城市。面对那么多的省份,如果我们通过if或者switch来 *** 作的话,使得代码很冗长,也难以维护。发现这里是通过Rarrayname这种形式来显示下拉列内容的。通过观察R文件,发现了一定的规律。R文件中的array类的int属性值,是根据写入顺序,从0x7f050000开始,逐个+1形成的。即
public static final int provinces=0x7f050000;
public static final int beijing_array=0x7f050001;
public static final int tianjin_array=0x7f050002;
可能R文件中没有按照此顺序排列,不过,不影响这一性质。所以我就想到了只要城市数组的顺序与省份一一对应(上面提到过),就可以通过所选省份的position,跟ID初始值
0x7f050000相加,得出所属城市的数组。具体看看代码
provinceSpinnersetOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView parent, View view,
int position, long id) {
if(position != 0){//选择了省份,position=0时,为“--请选择--”
0x7f050000为R文件中省份数组对应的id值,只要加上position,即可获得对应选项(省份)的城市
/
int cityID = 0x7f050000 + position;
ArrayAdapter adapter =
ArrayAdaptercreateFromResource(getApplicationContext(), cityID,
androidRlayoutsimple_spinner_item);
citySpinnersetAdapter(adapter);
}
}
public void onNothingSelected(AdapterView parent) {
}
});
二。
三、SQLite保存城市数据
使用SQLite而不使用Intent传递参数,是因为当用户下次打开程序时,当前城市应该为TA最后一次的选择。关于SQLite的使用,网上有很多文章,比如:52androidblog51ctocom/2554429/478368
之前也学习过一些,但四、PreferenceActivity作为设置界面
参照Android系统的设置,用PreferenceActivity来对系统进行信息配置和管理。这里我也采用PreferenceActivity作为设置界面。(上方图三)
首先,编写xml文件。PreferenceCategory:类别(用于分组)。key:唯一标识(获取信息时使用)。title:显示标题。summary:小标题。还有defaultValue:默认值。我这里值用到了CheckBoxPreference,它还有EditTextPreperence,RingtonePreference,ListPreference,Preference等。
schemasandroidcom/apk/res/android" >
android:key="threeDay"
android:summary="今明后三天的天气预报,如果不选,则只有当天的天气"
android:title="三天预报" />
android:key="cityInfo"
android:summary="关于当前城市的简要介绍"
android:title="城市简介" />
然后,新建Activity继承 PreferenceActivity
,重写onCreate方法,通过addPreferencesFromResource(Rxmlxx); 加载Preference。
public class SetupActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
addPreferencesFromResource(Rxmlsetup);
}
}
最后,获取preference数据。可 通过下面三种方式:
1、getPreferences():可以获取同一activity中的preference;
2、getSharedPreferences():可以获取应用级别的preferences,即封装在同一app中,使用SharePreferences
prefs = getSharedPreferences(packName+name ,0)
3、getDefaultSharedPreferences():通过Android的管理器来获取其所管理的preferences。
由于这里不是同一个Activity,所以不能使用getPreferences()。我这里只有一个preference,因此使用PreferenceManagergetDefaultSharedPreferences(this);来获取较方便。
五、通过WebService获取天气信息
WebService获取天气的网址为:webxmlcomcn/webservices/weatherwebserviceasmx上面
// 保存获取到的信息
SoapObject detail = null;
// 1实例化SoapObject对象
SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);
// 2如果方法需要参数,设置参数
soapObjectaddProperty("theCityName", cityName);
// 3设置Soap的请求信息,获得序列化envelope,参数部分为Soap协议的版本号
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelopeVER11);
envelopebodyOut = soapObject;
envelopedotNet = true;
envelopesetOutputSoapObject(soapObject);
// 4构建传输对象
int timeout = 10000;// 设置超时为10秒
MyAndroid>
SoapObject result = (SoapObject) envelopebodyIn;
SoapObject detail = (SoapObject) resultgetProperty(METHOD_NAME);
for (int i = 0; i < detailgetPropertyCount(); i++) {
SoapObject mstr = (SoapObject) detailgetProperty(i);
String str_result = mstr getProperty(0)toString();
listadd(str_result); //这个你要的
}
给你看看以前写的获取电话号码归属地的代码的三种方法,然后你就懂了。
import javaioByteArrayOutputStream;import javaioFileInputStream;
import javaioIOException;
import javaioInputStream;
import javanet>
它是一种构建应用程序的普遍模型,可以在任何支持网络通信的 *** 作系统中实施运行;它是一种新的web应用程序分支,是自包含、自描述、模块 化的应用,可以发布、定位、通过web调用。Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务各应用程序通过网络协议和规定的一些标准数据格式(>
嗯,可以直接调用,比如这个:
>
后面的theCityCode和theUserID就是参数。
返回一个XML(SOAP消息),你解析这个XML就可以了。
至于XML中的元素具体代表什么,你要查询他们的文档。
正确的办法是发送一个SOAP消息给他们,然后他们返回一个SOAP消息。
webservice就是通过SOAP消息传递数据的。
上面的请求标准是:
<xml version="10" encoding="utf-8"><soap12:Envelope xmlns:xsi=";
详细可以看看:
>
名词解释:简单对象访问协议(Simple Object Access Protocol,SOAP),是一种轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息。
以上就是关于webservice返回的xml怎么解析全部的内容,包括:webservice返回的xml怎么解析、java调用webservice接口具体怎么调用、android怎么访问天气webservice,用网上找的链接都不行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)