android通过webservice验证用户
来源:互联网 发布:寒夜知乎 编辑:程序博客网 时间:2024/05/19 03:43
http://danielzzu.blog.163.com/blog/static/118515304201011103562841/转自这里
在企业应用中,手机与企业数据的交互必不可少,在这里我们通过实例来描述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"?><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
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" />
- android通过webservice验证用户
- android通过webservice验证用户
- android通过webservice验证用户 .
- android loginDemo +WebService用户登录验证
- android loginDemo +WebService用户登录验证 续篇
- 通过用户登录验证学习WebService的使用
- webservice用户调用验证
- WebService通过TSoapHeader验证
- Android 用户远程验证----XFIRE,BASE64,KSOAP,WEBSERVICE
- Android中使用webservice验证用户登录的示例
- Android中使用webservice验证用户登录的示例
- Android 使用.net开发的webservice做用户登录验证
- Android客户端用户在线验证附带webservice的部署
- Android调用.NET webservice实现用户登录验证
- WebService中的用户验证问题
- 通过域验证访问WebService
- C#调用Axis2发布的带SoapHeader用户验证的WebService(通过测试)
- WebService的两种用户验证方式
- 解析模板标签
- WSDL手动生成WebService代理类的方法
- 说说而已的人生
- C++ Primer 第15章例子-文本查询程序
- wsgi调试
- android通过webservice验证用户
- 如何把一个现成的exe文件合并到合并到我的程序里?运行时再释放出来?
- 所以你想做的到底是什么
- 诛仙 19
- PL/SQL LEARNING NOTES(1)
- NHibernate映射关系表(实体映射文件字段的属性对应的NHibernate类型)
- css简例
- bfs hdu 1732 push the box
- 用递归反向输出一个整数