android 客户端调用webservice 读取xml文件实现登录

用户登陆

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



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值