android 客户端使用service处理用户名和密码验证,android透过webservice验证用户

当前位置:我的异常网» Web前端 » android透过webservice验证用户

android透过webservice验证用户

www.myexceptions.net  网友分享于:2015-08-26  浏览:37次

android通过webservice验证用户

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

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

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;

}

}

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、布局文件

main.xml

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

2、login.java

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 params=new HashMap();

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 params=null;

ProgressDialog progressDialog=null;

public HttpThread(Handler hander)

{

handle=hander;

}

//线程开始

public void doStart(String url, String nameSpace, String methodName,                         HashMap 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加入

1 楼

msn877763580

2012-02-22

icon_mad.gif 朋友。。。看的晕了彻底

2 楼

foxer

2012-04-13

没法看,发布的时候怎么没用code格式一下呀.院

文章评论

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值