android 客户端调用webservice 读取xml文件实现登录
2012-04-17 15:14
393 查看
用户登陆
<?xml version="1.0"encoding="utf16" standalone="yes" ?><root version="2.003">
<state success="false">
<error no="0" info="用户名不存在!"/>
<warning no="0"info="" />
</state>
<output name="">
<rolelist>
<rolelistdetail rolerid="1001" rolename="仓库收货" />
<rolelistdetail roleid="2001" rolename="仓房收货" />
</rolelist>
</output>
</root>
l state节点包括三类子节点<error>,<warning>,<information>,其中属性no是信息编码,属性info是具体信息。
l <error>子节点用于显示操作的失败信息,当属性success="true"时,该操作成功,子节点中不会出现<error>子节点,当success="false"时该操作失败,则至少有一条<error>字节点,显示该操作的失败原因;
l <warning>子节点用于显示操作中一些需要操作员注意的事项,不论操作成功与否,都有可能出现<warning>子节点,且<warning>子节点可能是多条;
l <information>子节点用于显示操作中的附加信息,不论操作成功与否,都有可能出现< information >子节点,且<information >子节点可能是多条。
首先..写个类存储这些需要解析的文件信息::
public class LoginVO {
private String state;
private String error;
private String warning;
private List<Map> roleList = new ArrayList<Map>();
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public String getWarning() {
return warning;
}
public void setWarning(String warning) {
this.warning = warning;
}
public List<Map> getRoleList() {
return roleList;
}
public void setRoleList(List<Map> roleList) {
this.roleList = roleList;
}
public void addRoleList(Map map){
getRoleList().add(map);
}
}
再要写个辅助类继承于DefaultHandler的辅助类触发时需要用的::
public class XMLHandler extends DefaultHandler {
LoginVO loginVO = new LoginVO ();
// 默认构造方法
public XMLHandler() {
super();
}
// 构造方法
public XMLHandler(LoginVO loginVO) {
this.loginVO = loginVO;
}
/*
* 文档结束时触发
*/
@Override
public void endDocument() throws SAXException {
System.out.println("文档解析结束");
super.endDocument();
}
/*
* 文档开始时触发
*/
@Override
public void startDocument() throws SAXException {
System.out.println("文档解析开始");
super.startDocument();
}
/*
* 元素开始时触发
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("startElement:"+ qName);
if (qName.equals("state")) {
loginVO.setState(attributes.getValue("success"));
}
if (qName.equals("error")) {
loginVO.setError(attributes.getValue("info"));
}
if (qName.equals("warning")) {
loginVO.setWarning(attributes.getValue("info"));
}
if (qName.equals("rolelistdetail")) {
Map map = new HashMap();
map.put("roleid", attributes.getValue("roleid"));
map.put("rolename", attributes.getValue("rolename"));
loginVO.addRoleList(map);
}
super.startElement(uri, localName, qName, attributes);
}
/*
* 元素结束时触发
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println( "元素解析结束");
super.endElement(uri, localName, qName);
}
/*
* 读取元素内容
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
}
}
然后开始解析::
public class LonginParse {
// 解析登錄的xml
public LoginVO parse(String googleWeatherString) {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
LoginVO LoginVO = new LoginVO();
try {
XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();
XMLHandler handler = new XMLHandler(LoginVO);
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(new StringReader(googleWeatherString)));
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return LoginVO;
}
}
最后是编写登录主程序的代码::
public class LoginActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
EditText etuid = (EditText)findViewById(R.id.etUid);
EditText etpwd = (EditText)findViewById(R.id.etPwd);
Button btnLogin = (Button)this.findViewById(R.id.btnLogin);
btnLogin.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0) {
try {
/*
login();
String loginVO =login();
if("false".equals(login())){
gotof();
}
else if("true".equals(login())){
gotos(loginVO);
}
*/
LoginVO loginVO = login();
if("false".equals(loginVO.getState())){
gotof();
}
else if("true".equals(loginVO.getState())){
gotos(loginVO);
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void gotos(LoginVO loginVO ) {
String rolerid = "";
List<Map> roles = loginVO.getRoleList();
for(Map map:roles)
rolerid = (String)map.get(rolerid);
if(rolerid.equals("1001")){
Intent intent = new Intent(LoginActivity.this, Drug_storage .class);
startActivity(intent);
finish();
}
else if(rolerid.equals("2001")){
Intent intent = new Intent(LoginActivity.this, Drug_house .class);
startActivity(intent);
finish();
}
Toast.makeText(LoginActivity.this, "登陆成功...", Toast.LENGTH_SHORT).show();//输出提示消息
return;
}
private void gotof() {
// TODO Auto-generated method stub
Toast.makeText(LoginActivity.this, "登陆失败...", Toast.LENGTH_SHORT).show();//输出提示消息
return;
}
private LoginVO login() throws ParserConfigurationException, SAXException {
// TODO Auto-generated method stub
String result = "";
LoginVO loginVO = null;
//String text="";
//Object num="";
try {
String NameSpace="http://tempuri.org/";
String MethodName="UserValidation";
String url="http://192.168.0.198:8090/wstest.asmx";
String soapAction= NameSpace + MethodName;
//step1 指定WebService的命名空间和调用的方法名
SoapObject request = new SoapObject(NameSpace, MethodName);
//step2 设置调用方法的参数值,这里的参数名称不一定和WebService一致
//request.addProperty("a", "11");
//request.addProperty("b","fg");
//step3 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
//设置是否调用的是dotNet下的WebService
envelope.dotNet = true;
//必须,等价于envelope.bodyOut = request;
envelope.setOutputSoapObject(request);
//step4 创建HttpTransportSE对象
HttpTransportSE ht = new HttpTransportSE(url);
//step5 调用WebService
ht.call(soapAction, envelope);
//step6 使用getResponse方法获得WebService方法的返回结果
if(envelope.getResponse()!=null){
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
result = response.toString();
LonginParse lp = new LonginParse();
loginVO = lp.parse(result );
//text = loginVO.getState();
//List<Map> rl = loginVO.getRoleList();
}
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return loginVO;
}
});
Button btnExit = (Button)findViewById(R.id.btnExit);
btnExit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
android.os.Process.killProcess(android.os.Process.myPid());
//结束进程,退出程序
}
});
}
}
相关文章推荐
- Android调用WebService之客户端实现(二)
- Android调用.NET webservice实现用户登录验证
- Android调用WebService之客户端实现(二)
- Android客户端与Tomcat服务器通信实现登录验证
- Java实现调用WebService的客户端程序
- java实现WebService 以及客户端不同的调用方式
- jax-ws实现Webservice入门教程 (客户端调用服务端实现)
- android之调用webservice 实现图片上传下载
- 用 WebService 实现 Silverlight 客户端调用第三方动态链接库(Fortran DLL)的具体过程
- android之调用webservice 实现图片上传
- Android之调用webservice 实现图片上传下载
- 我的Android进阶之旅------>Android通过调用Webservice实现天气预报
- android之调用webservice 实现图片上传
- Android通过调用Webservice实现天气预报
- Android客户端向服务器端传值——登录实现(一)
- 如何在Android使用Rest服务从客户端调用webservice
- android 调用webservice 登录例子
- 实习日志(13):服务器端向Android客户端传值——登录实现(二)
- Android调用Webservice实现…
- Android客户端调用Asp.net的WebService