android通过webservice验证用户

在企业应用中,手机与企业数据的交互必不可少,在这里我们通过实例来描述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" />

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值