android通过webservice验证用户

4 篇文章 0 订阅
在企业应用中,手机与企业数据的交互必不可少,在这里我们通过实例来描述android怎样调用.net webservice

第一步:vs2008建webservice ,贴出代码:

 

android通过webservice验证用户 - daniel - danielzzu涅槃之城clsoptuser.cs

public class  clsoptuser
{
  //验证方法
public bool  Validate( string  u,  string  p)
{
bool  k  = false ;
SqlConnection userConn 
= new  SqlConnection( " 连接字符 " );
userConn.Open();
SqlCommand userComm 
= new  SqlCommand( " select *from user " , userConn);
SqlDataReader userDr 
=  userComm.ExecuteReader();
string  tmpuser, tmppass;
while  (userDr.Read())
{
int  userindex  =  userDr.GetOrdinal( " user " );
int  passindex  =  userDr.GetOrdinal( " password " );
tmpuser 
=  userDr.GetString(userindex);
tmppass 
=  userDr.GetString(passindex);
        //用户名和口令正确返回true
if  ((tmpuser  ==  u)  &&  (tmppass  ==  p))
{
k 
= true ;
break ;
}
}

return  k;
}
}

 

android通过webservice验证用户 - daniel - danielzzu涅槃之城 Service.cs
[WebMethod]
public bool  ValidateUsername( string  username,  string  pass,  string  validate)
{
if  (validate  == " webservice验证码 " )
{
clsoptuser objoptuser 
= new  clsoptuser();
return  objoptuser.Validate(username, pass);

}
else
{

return false ;
}
}

 

以上是服务器端的代码,把上面程序布署到IIS,布署以后可以用IE测试,具体布署我就不说了,网上到处有!

第二步:android客户端

android调用webservice 要用到ksoap2-android-assembly-2.4-jar-with-dependencies.jar一个包,到网上可下载,然后在Eclipce项目中添加处部jar

  1、布局文件

 

android通过webservice验证用户 - daniel - danielzzu涅槃之城main.xml 

<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< LinearLayout xmlns:android = " http://schemas.android.com/apk/res/android "
android:orientation
= " vertical "
android:layout_width
= " fill_parent "
android:layout_height
= " fill_parent "
android:background = " @drawable/login2 "
android:gravity = " bottom " >

< LinearLayout android:id = " @+id/LinearLayout02 "  
android:layout_height
= " wrap_content "  
android:layout_width
= " fill_parent " >
< TextView android:layout_width = " wrap_content "  
android:layout_height
= " wrap_content "  
android:id
= " @+id/labeluser "  
android:text
= " @string/labelname "  
android:textStyle
= " bold "  
android:textSize
= " 20sp " >
</ TextView >
< EditText android:layout_height = " wrap_content "  
android:id
= " @+id/EditTextUser "  
android:width
= " 150px "  
android:layout_width
= " fill_parent " >
</ EditText >
</ LinearLayout >
< LinearLayout android:id = " @+id/LinearLayout03 "  
android:layout_height
= " wrap_content "  
android:layout_width
= " fill_parent " >
< TextView android:layout_width = " wrap_content "  
android:layout_height
= " wrap_content "  
android:id
= " @+id/labelpass "  
android:text
= " 登录密码: "  
android:textStyle
= " bold "  
android:textSize
= " 20sp " >
</ TextView >
< EditText android:layout_height = " wrap_content "  
android:id
= " @+id/EditTextPassWord "  
android:password
= " true "
android:layout_width
= " fill_parent " >
</ EditText >
</ LinearLayout >
< LinearLayout android:id = " @+id/LinearLayout04 "
  android:layout_height = " wrap_content "
  android:layout_width = " fill_parent "
  android:gravity = " center " >
< CheckBox android:id = " @+id/CheckBox01 "
    android:layout_width = " wrap_content "
    android:layout_height = " wrap_content "
    android:text = " 记住用户名和密码 "
    android: checked = " true " >
  </ CheckBox >
</ LinearLayout >





< LinearLayout android:id = " @+id/LinearLayout01 "
    android:layout_height = " wrap_content "
    android:layout_width = " fill_parent "
    android:layout_gravity = " bottom "
    android:gravity = " center " >
    < Button android:id = " @+id/BtnLogin "
        android:text = " 登 录 "
        android:layout_height = " wrap_content "
        android:layout_width = " wrap_content "
        android:layout_weight = " 1 " >
    </ Button >
    < Button android:layout_width = " wrap_content "
        android:layout_height = " wrap_content "
        android:id = " @+id/BtnExit "
        android:text = " 退 出 "
       android:layout_weight = " 1 " >
    </ Button >
</ LinearLayout >

</ LinearLayout >

想到每次进系统都要输入用户名和密码都恐怖(android的虚拟键盘确实不怎的),所以上面加了个"记住用户名和密码",方便下次不用输用户名和密码.

2、login.java

android通过webservice验证用户 - daniel - danielzzu涅槃之城login.java
package  com.liwei.login;

import  java.util.ArrayList;
import  java.util.HashMap;
import  java.util.Iterator;
import  java.util.Map;
import  java.util.Map.Entry;

import  org.ksoap2.SoapEnvelope;
import  org.ksoap2.serialization.SoapObject;
import  org.ksoap2.serialization.SoapPrimitive;
import  org.ksoap2.serialization.SoapSerializationEnvelope;
import  org.ksoap2.transport.AndroidHttpTransport;

import  com.liwei.prohotel.clswdy.HttpThread;

import  android.app.Activity;
import  android.app.AlertDialog;
import  android.app.ProgressDialog;
import  android.content.Context;
import  android.content.DialogInterface;
import  android.content.Intent;
import  android.content.SharedPreferences;
import  android.content.SharedPreferences.Editor;
import  android.os.Bundle;
import  android.os.Handler;
import  android.os.Message;
import  android.view.View;
import  android.widget.Button;
import  android.widget.CheckBox;
import  android.widget.EditText;
import  android.widget.ListView;
import  android.widget.SimpleAdapter;
import  android.widget.Toast;


public class  login  extends  Activity {
Button btnlogin,btnexit; //登录和退出按钮对像
EditText edituser,editpass; //用户名和密码输入框对象
boolean  data = false ; //调用webservice 近回的数据,验证成功true,失败false
HttpThread thread
= null ; //线程对像
String name
= "" ; //用户名
String pass
= "" ; //口令
/**  Called when the activity is first created.  */
@Override
public void  onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
btnlogin
= (Button)findViewById(R.id.BtnLogin); //获得用户名和密码按钮实例
btnexit
= (Button)findViewById(R.id.BtnExit);
edituser
= (EditText)findViewById(R.id.EditTextUser); //获得用户名和密码Edittext
editpass
= (EditText)findViewById(R.id.EditTextPassWord);
     //获取上次保存的用户名和密码
SharedPreferences sp
= getSharedPreferences( " login " ,Context.MODE_PRIVATE);
String tempstr
= sp.getString( " username " ,  "" );
edituser.setText(tempstr);
editpass.setText(sp.getString(
" pass " ,  "" ));
     //退出按钮点击事件
btnexit.setOnClickListener(
new  View.OnClickListener() {

public void  onClick(View arg0) {
//  TODO Auto-generated method stub
finish();

}
});
//登录按钮点击事件
btnlogin.setOnClickListener(
new  View.OnClickListener() {

public void  onClick(View arg0) {
//  TODO Auto-generated method stub


name = edituser.getText().toString();
pass
= editpass.getText().toString();

ResponseOnClickLogin(name, pass);


}
});
}

public void  ResponseOnClickLogin(String username,String password){

thread
= new  HttpThread(handlerwdy); //建立线程实例 

HashMap 
< String ,Object >  params = new  HashMap < String ,Object > ();
try{
       String strvalidate = " galyglxxxt " ;
strvalidate
= new  String(strvalidate.toString().getBytes(), " UTF-8 " );
params.put(
" username " , username); // 加入参数
params.put( " pass " , password);
params.put(
" validate " , strvalidate);
}
catch (Exception ex){
ex.printStackTrace();
}

String url = " 192.168.3.2:8080/loginweb/service.asmx " ;//webserivce地址
   String nameSpace  = " http://tempuri.org/ " ; //空间名,可修改
   String methodName 
= " ValidateUsername " ; //需调用webservice名称
   thread.doStart(url, nameSpace, methodName, params); //启动线程

  }
  //生成消息对象
Handler handlerwdy
= new  Handler(){

public void  handleMessage(Message m){
switch (m.what){
case 1 :
data
= m.getData().getBoolean( " data " ); //从消息在拿出数据

if (data){
CheckBox cb
= (CheckBox)findViewById(R.id.CheckBox01); //如果要保存用户名和密码
if (cb.isChecked())
{ 
SharedPreferences sp
= getSharedPreferences( " login " ,Context.MODE_PRIVATE);
Editor editor
= sp.edit();
String tempname
= name;
editor.putString(
" username " , name);
editor.putString(
" pass " , pass);
editor.commit();
}
else
{
SharedPreferences sp
= getSharedPreferences( " login " ,Context.MODE_PRIVATE);
Editor editor
= sp.edit();
editor.putString(
" username " ,  "" );
editor.putString(
" pass " ,  "" );
editor.commit();
}
           //登录成功后的提示                  
Toast.makeText(prohotel.
this , getString(R.string.login_message), Toast.LENGTH_SHORT)
.show();
            //成功后界面要交给项目的主界面了
Intent in
= new  Intent(prohotel. this ,promain. class );
//把用户名传给下一个activity
Bundle bundle 
= new  Bundle(); 
bundle.putString(
" KEY_USERNAME " ,name); 
in.putExtras(bundle); 
login.
this .startActivity(in);

}
else
{
          //验证不通过,给出个提示
SharedPreferences sp
= getSharedPreferences( " login " ,Context.MODE_PRIVATE);
Editor editor
= sp.edit();
editor.putString(
" username " ,  "" );
editor.putString(
" pass " ,  "" );
editor.commit();
new  AlertDialog.Builder(prohotel. this )
.setTitle(getString(R.string.login_message_title)) 
.setMessage(getString(R.string.login_message_title)) 
.setIcon(R.drawable.cancel)
.setNeutralButton(getString(R.string.login_button_text), 
new  DialogInterface.OnClickListener() { 
public void  onClick(DialogInterface dlg,  int  sumthin) { 
//  do nothing ?C it will close on its own 
} 
}) 
.show();
}
break ; 
case 2 :
         //收到了调用出错的消息       
new  AlertDialog.Builder(prohotel. this )
.setTitle(
" 出错: " ) 
.setMessage(m.getData().getString(
" error " )) 
.setNeutralButton(
" Close " ,  new  DialogInterface.OnClickListener() { 
public void  onClick(DialogInterface dlg,  int  sumthin) { 
//  do nothing ?C it will close on its own 
} 
}) 
.show();
break ;

} 
} 
};
//线程类

public class  HttpThread  extends  Thread{
private  Handler handle = null ;
String url
= null ;
String nameSpace
= null ;
String methodName
= null ;
HashMap 
< String ,Object >  params = null ;
ProgressDialog progressDialog
= null ;


public  HttpThread(Handler hander){
handle
= hander;
}
//线程开始

public void  doStart(String url, String nameSpace, String methodName,
HashMap
< String, Object >  params) {
//  把参数传进来
this .url = url;
this .nameSpace = nameSpace;
this .methodName = methodName;
this .params = params;
//告诉使用者,请求开始了
progressDialog = new  ProgressDialog(prohotel. this );
progressDialog.setTitle(
" 网络连接 " );
progressDialog.setMessage(
" 正在请求,请稍等...... " );
progressDialog.setIndeterminate(
true );
// progressDialog=ProgressDialog.show(clswdy.this, "网络连接","正在验证,请稍等......",true,true);
progressDialog.setButton( " 取消 " ,  new  DialogInterface.OnClickListener() {
public void  onClick(DialogInterface dialog,  int  i) {
progressDialog.cancel();

}
});
progressDialog.setOnCancelListener(
new  DialogInterface.OnCancelListener() {
public void  onCancel(DialogInterface dialog) {
}
});
progressDialog.show();
this .start(); //线程开始了
}
/**

*/
@Override
public void  run() {
//  TODO Auto-generated method stub
super .run();
try {
// web service请求,result为返回结果
boolean  result =  CallWebService();

if (result){

// 取消进度对话框
progressDialog.dismiss();
// clswdy.this.setProgressBarIndeterminateVisibility(false);
// 构造消息,验证通过了
Message message = handle.obtainMessage();
Bundle b
= new  Bundle();
message.what
= 1 ; //这里是消息的类型
b.putBoolean(
" data " ,  true ); //这里是消息传送的数据

message.setData(b);
handle.sendMessage(message);
}
else
{
progressDialog.dismiss();

Message message = handle.obtainMessage();
Bundle b
= new  Bundle();
message.what
= 1 ;
b.putBoolean(
" data " ,  false );
message.setData(b);
handle.sendMessage(message);

}
}
catch (Exception ex){
progressDialog.dismiss();
//  构造消息,程序出错了
Message message = handle.obtainMessage();
Bundle b
= new  Bundle();
message.what
= 2 ; 

b.putString( " error " , ex.getMessage());

message.setData(b);
handle.sendMessage(message);


}
finally {

}
}

/**

* 
*/
protected boolean  CallWebService()  throws  Exception{
String SOAP_ACTION 
=  nameSpace  +  methodName; 
boolean  response = false ;
SoapObject request
= new  SoapObject(nameSpace,methodName);
//  boolean request=false;
SoapSerializationEnvelope envelope = new  SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.dotNet
= true ; //.net 支持

//  参数

if (params  != null && ! params.isEmpty() ){
for (Iterator it = params.entrySet().iterator();it.hasNext();){
Map.Entry e
= (Entry) it.next();
request.addProperty(e.getKey().toString(),e.getValue());

}
}
envelope.bodyOut
= request;
//
AndroidHttpTransport androidHttpTrandsport = new  AndroidHttpTransport(url);
// HttpTransportSE androidHttpTransport = new HttpTransportSE(url);
SoapObject result = null ;
try {
// web service请求
androidHttpTrandsport.call(SOAP_ACTION, envelope);
// 得到返回结果
Object temp = envelope.getResult();
response
= Boolean.parseBoolean(temp.toString());
}
catch (Exception ex){
throw  ex;
}
return  response;

}
}
}

以上验证程序需要访问网络,别忘了在AndroidManifest.xml加入 <uses-permission android:name="android.permission.INTERNET" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值