Androidはwebserviceでユーザーを検証します


http://danielzzu.blog.163.com/blog/static/118515304201011103562841/ここから
企業アプリケーションでは、携帯電話と企業データのインタラクションが少なくないに違いない.ここではandroidがどのように呼び出されるかを例によって説明する.net webservice
ステップ1:vs 2008 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でテストすることができて、具体的な配置は私は言わないで、ネット上であちこちあります!
ステップ2:androidクライアント
Android呼び出しwebserviceはksoap 2-android-assembly-2.4-jar-with-dependenciesを使用します.jarは1つのパッケージで、ネット上でダウンロードすることができて、それから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加入