您的位置:首页 > 移动开发 > Android开发

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());
//结束进程,退出程序

}

});

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: