300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > android 客户端使用service处理用户名和密码验证 android透过webservice验证用户

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

时间:2019-09-18 05:25:09

相关推荐

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

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

android透过webservice验证用户

网友分享于:-08-26浏览:37次

android通过webservice验证用户

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

第一步:vs建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 = "/"; //空间名,可修改

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);

mit();

}

else

{

SharedPreferences sp=getSharedPreferences("login",Context.MODE_PRIVATE); Editor editor=sp.edit();

editor.putString("username", "");

editor.putString("pass", "");

mit();

}

//登录成功后的提示 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", "");

mit();

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

-02-22

朋友。。。看的晕了彻底

2 楼

foxer

-04-13

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

文章评论

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。